For
Запуск указанной команды для каждого из файлов в наборе (
запуск указанной команды для каждого файла в наборе файлов, чаще всего используется в пакетном файле или файле сценария )
Выполнение указанной команды для каждого файла набора.
FOR %переменная IN (набор) DO команда [параметры]
%переменная Подставляемый параметр.
(набор) Набор, состоящий из одного или нескольких файлов.
Допускается использование подстановочных знаков.
команда Команда, которую следует выполнить для каждого файла.
параметры Параметры и ключи для указанной команды.
В пакетных файлах для команды FOR используется запись
%%переменная вместо %переменная. Имена переменных
учитывают регистр букв (%i отличается от %I).
Добавление поддерживаемых вариантов команды FOR при включении расширенной
обработки команд:
FOR /D %переменная IN (набор) DO команда [параметры]
Если набор содержит подстановочные знаки, команда выполняется для всех
подходящих имен каталогов, а не имен файлов.
FOR /R [[диск:]путь] %переменная IN (набор) DO команда [параметры]
Выполнение команды для каталога [диск:]путь, а также для всех
подкаталогов этого пути. Если после ключа /R не указано имя каталога,
выполнение команды начинается с текущего каталога.
Если вместо набора указана только точка (.), команда выводит список
всех подкаталогов.
FOR /L %переменная IN (начало,шаг,конец) DO команда [параметры]
Набор раскрывается в последовательность чисел с заданными началом, концом
и шагом приращения. Так, набор (1,1,5) раскрывается в (1 2 3 4 5),
а набор (5,-1,1) заменяется на (5 4 3 2 1)
FOR /F ["ключи"] %переменная IN (набор) DO команда [параметры]
FOR /F ["options"] %variable IN ("literal string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
или, если использован параметр usebackq:
FOR /F ["options"] %variable IN (filenameset) DO command [command-parameters]
FOR /F ["options"] %variable IN ('literal string') DO command [command-parameters]
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters]
Набор содержит имена одного или нескольких файлов, которые по очереди
открываются, читаются и обрабатываются. Обработка состоит в чтении
файла, разбивки его на отдельные строки текста и выделения из каждой
строки заданного числа подстрок (в том числе нуля). Затем найденная
подстрока используется в качестве значения переменной при выполнении
основного тела цикла. По умолчанию ключ /F выделяет из каждой строки файла
первое слово, очищенное от окружающих его пробелов. Пустые строки
в файле пропускаются. Необязательный параметры "ключи" служит для
переопределения заданных по умолчанию правил обработки строк. Ключи
представляют собой заключенную в кавычки строку, содержащую указанные
параметры. Ключевые слова:
eol=c - определение символа комментариев в конце строки
(допускается задание только одного символа).
skip=n - число пропускаемых при обработке строк в начале
файла.
delims=xxx - определение набора разделителей для замены заданных
по умолчанию пробела и знака табуляции.
tokens=x,y,m-n - определение номеров подстрок, выделяемых из каждой
строки файла и передаваемых для выполнения в тело
цикла. При использовании этого ключа создаются
дополнительные переменные. Формат m-n представляет
собой диапазон подстрок с номерами от m по n. Если
последний символ в строке tokens= является
звездочкой, создается дополнительная переменная,
значением которой будет весь оставшийся текст в
строке после обработки последней подстроки.
usebackq - применение новой семантики, при которой строки,
заключенные в обратные кавычки, выполняются как
команды, строки, заключенные в прямые одиночные
кавычки, являются строкой литералов команды, а
строки, заключенные в двойные кавычки, используются
для выделения имен файлов в списках имен файлов.
Поясняющий пример:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
эта команда обрабатывает файл myfile.txt, пропускает все строки, которые
начинаются с символа точки с запятой, и передает вторую и третью подстроки
из каждой строки в тело цикла, причем подстроки разделяются запятыми и/или
пробелами. В теле цикла переменная %i используется для второй подстроки,
%j - для третьей, а %k получает все оставшиеся подстроки после третьей.
Имена файлов, содержащие пробелы, необходимо заключать в двойные кавычки.
Для того чтобы использовать двойные кавычки, необходимо использовать
параметр usebackq, иначе двойные кавычки будут восприняты как границы
строки для обработки.
Переменная %i явно описана в инструкции for, а переменные %j и %k
описываются неявно с помощью ключа tokens=. Ключ tokens= позволяет извлечь
из одной строки файла до 26 подстрок, при этом, не допускается
использование переменных больших чем буквы 'z' или 'Z'. Следует помнить,
что имена переменных FOR являются глобальными, поэтому одновременно не
может быть активно более 52 переменных.
Синтаксис команды FOR /F также позволяет обработать отдельную строку,
с указанием параметра filenameset, заключенным в одиночные кавычки.
Строка будет обработана как единая строка из входного файла.
Наконец, команда FOR /F позволяет обработать строку вывода другой команды.
Для этого следует ввести строку вызова команды в апострофах вместо набора
имен файлов в скобках. Строка передается для выполнения обработчику
команд CMD.EXE, а вывод этой команды записывается в память и
обрабатывается так, как будто строка вывода взята из файла. Например,
следующая команда:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
выведет перечень имен всех переменных среды, определенных в настоящее
время в системе.
Операции подстановки ссылок на переменные команды FOR также расширены.
Допускается применение следующих синтаксических конструкций:
%~I - из переменной %I удаляются обрамляющие кавычки (")
%~fI - переменная %I расширяется до полного имени файла
%~dI - из переменной %I выделяется только имя диска
%~pI - из переменной %I выделяется только путь к файлу
%~nI - из переменной %I выделяется только имя файла
%~xI - из переменной %I выделяется расширение имени файла
%~sI - полученный путь содержит только короткие имена
%~aI - переменная %I расширяется до атрибутов файла
%~tI - переменная %I расширяется до даты /времени файла
%~zI - переменная %I расширяется до размера файла
%~$PATH:I - проводится поиск по каталогам, заданным в переменной
среды PATH, и переменная %I заменяется на полное
имя первого найденного файла. Если переменная PATH
не определена или в результате поиска не найден ни
ни один файл, то этот модификатор заменяется на пустую
строку
При объединении нескольких операторов можно получить следующие результаты:
%~dpI - переменная %I заменяется только на имя диска и путь
%~nxI - переменная %I заменяется только на имя файла и его
расширение
%~fsI - переменная %I заменяется только на полный путь с
краткими именами
%~dp$PATH:I - проводится поиск по каталогам, заданным в переменной
среды PATH, и переменная %I заменяется на имя диска
и путь к первому найденному файлу.
%~ftzaI - переменная %I заменяется на строку, выдаваемую
командой DIR
В приведенных выше примерах переменные %I и PATH можно заменить на
любые другие допустимые значения. В таких синтаксических конструкциях
за символами %~ может следовать любое имя переменной цикла FOR.
Рекомендуется использовать заглавные буквы для имен таких переменных,
например, %I, что делает их более заметными, а также позволяет отличать
их от обозначений модификаторов, которые не различают используемый регистр.