FOR /D %%f IN (C:\) DO ECHO %%f

2) FOR /R [[диск:]путь] %переменная IN (набор) DO команда [параметры]

Организует рекурсивное выполнение заданной команды для определенного каталога, а также всех его подкаталогов. Например, для распечатки всех файлов с расширением *.txt:

FOR /R %%f IN (*.txt) DO PRINT %%f

3) FOR /L %переменная IN (начало,шаг,конец) DO команда [параметры]

Класический цикл с параметром (заданными началом, концом и шагом приращения). Например:

FOR /L %%f IN (1,1,5) DO ECHO %%f

4) FOR /F [“ключи”] %переменная IN (набор) DO команда [параметры]

Чтение и обработка строк из набора текстовых файлов. Ключи позволяют выделять слова и подстроки (токены) по разделителям (DELIMS) или начальным символам.

5) FOR /F [“ключи”] %переменная IN (‘строка’) DO команда [параметры]

Позволяет обработать строку вывода определенной команды (вместо набора файлов в предыдущем варианте – строка вызоыв команды в апострофах). Например, для вывода имен всех переменных среды:

FOR /F “DELIMS==” %%i IN (‘SET’) DO ECHO %%i

Кроме того, для переменных команды FOR разрешены также синтаксические операции (выделение имени, пути, диска - аналогично рассм. выше переменным окружения).

Команда PUSHD сохраняет имя текущего каталога для команды POPD и осуще­ствляет переход в другой каталог. Ее синтаксис имеет вид:

PUSHD [путь | ..]

Вновь сделать текущим каталог, сохраненный командой pushd, можно с помощью команды popd.

Упражнения

1. Пусть имеется текстовый файл protokol.txt, в котором хранится журнал обработанных файлов в следующем формате:

<имя файла> <дата> <время>

Слово дата здесь начинается в каждой строке с двадцатой позиции.

Необходимо написать командный файл, с помощью которого сделать выборку из этого файла (т. е. создать новый текстовый файл с нужной информацией) за заданный месяц (мм) и год (гггг) в файл ммгггг-.txt, сформированный файл упорядочить по дате обработки. Нужные месяц и год указать как параметры командной строки.

Решение:

Практически все нужные действия выполняются с помощью конвейеризации команд find и sort:

ЕСНО OFF RЕМ Проверка наличия параметров командной строки

IF -%1==- GOTO NoParam

IF -%2==- GOTO NoParam

REM Выделение нужных строк из файла protokol.txt

FIND "%1.%2" protokol.txt | SORT /+26 > %l%2.txt

GOTO End

NoParam

ECHO He заданы необходимые параметры командной строки!

PAUSE

End

2. Написать командный файл, который будет копировать из текущего ката­лога все файлы с расширением txt, кроме одного файла, указанного в качестве второго параметра командной строки, в каталог, указанный пер­вым параметром. Если имя каталога, в который должно производиться копирование, не задано, то вывести сообщение об этом и прервать выполнение файла.

Решение:

Для выполнения поставленной задачи можно перебрать в цикле все фай­лы с расширением txt, проверяя перед копированием имя каждого из этих файлов:

ЕСНО OFF

REM Проверка наличия параметра командной строки

IF -%!==- GOTO NoDir

RЕМ Копирование нужных файлов

FOR %%f IN (*.txt) DO IF NOT -%%f==-%2 COPY %%f %1

GOTO End

NoDir

ECHO He указан каталог для копирования!

PAUSE

End

3. Задание аналогично второму упражнению. Дополнительные требования:
а) переписывать только те файлы, которые новее одноименных в каталоге - приемнике,

б) не прерывать копирование в случае возникновения ошибки,

в) записывать в файл logcopy.txt имя каждого копируемого файла и результат выполнения операции для него.

Другими словами, файл logcopy.txt должен быть примерно таким:

Успешно: а.txt

Ошибка : b.txt

Успешно: с.txt

Решение:

В этом упражнении нужно создать два пакетных файла. В основном фай­ле работает такой же цикл for, как и в предыдущем упражнении, однако вместо непосредственного выполнения команды copy здесь вызывается
командный файл 3_1. bat:

ЕСНО OFF

REM Проверка наличия параметра командной строки

IF -%1==- GOTO NoDir

REM Вызов в цикле файла 3_l.bat для копирования нужного файла

FOR %%f IN (*.txt) DO IF NOT -%%f=-%2 CALL 3_l.bat %%f %1

GOTO End

NoDir

Наши рекомендации