Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Выполняет указанную команду для каждого файла в наборе файлов.
Syntax
for {%% | %}<variable> in (<set>) do <command> [<commandlineoptions>]
Parameters
| Parameter | Description |
|---|---|
{%% \| %}<variable> |
Required. Представляет замещаемый параметр. Используйте знак одного процента (%) для выполнения команды for в командной строке. Используйте знаки двойного процента (%%) для выполнения команды for в пакетном файле. Переменные чувствительны к регистру и должны быть представлены в алфавитном порядке, например %a, %bили %c. |
(<set>) |
Required. Задает один или несколько файлов, каталогов или текстовых строк или диапазон значений, в которых выполняется команда. Скобки обязательны. |
<command> |
Required. Указывает команду, которую необходимо выполнить для каждого файла, каталога или текстовой строки, а также для диапазона значений, включенных в набор. |
<commandlineoptions> |
Указывает все параметры командной строки, которые необходимо использовать с указанной командой. |
| /? | Отображение справки в командной строке. |
Remarks
Эту команду можно использовать в пакетном файле или непосредственно из командной строки.
К команде for применяются следующие атрибуты:
Эта команда заменяет
% variableили%% variableкаждой текстовой строкой в указанном наборе, пока указанная команда не обрабатывает все файлы.Имена переменных чувствительны к регистру, глобальные и не более 52 могут быть активными одновременно.
Чтобы избежать путаницы с параметрами пакета, через
%0, вы можете использовать любой символ для%9, кроме цифр от 0 до 9. Для простых пакетных файлов один символ, например%%f, будет работать.Можно использовать несколько значений переменной в сложных пакетных файлах, чтобы различать различные заменяемые переменные.
Параметр set может представлять одну группу файлов или несколько групп файлов. Вы можете использовать подстановочные знаки (* и ?) для указания набора файлов. Ниже приведены допустимые наборы файлов:
(*.doc) (*.doc *.txt *.me) (jan*.doc jan*.rpt feb*.doc feb*.rpt) (ar??1991.* ap??1991.*)При использовании этой команды первое значение в наборе заменяет
% variableили%% variable, а затем указанная команда обрабатывает это значение. Это продолжается до тех пор, пока не будут обработаны все файлы (или группы файлов), соответствующие заданному значению.In и do не являются параметрами, но вы должны использовать их с этой командой. Если вы опустите одно из этих ключевых слов, появится сообщение об ошибке.
Если расширения команд включены (по умолчанию), поддерживаются следующие дополнительные формы for :
Только каталоги: Если set содержит подстановочные знаки (* или ?), указанная команда выполняется для каждого каталога (а не набора файлов в указанном каталоге), который соответствует set. Синтаксис:
for /d {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]Рекурсивный: Проходит по дереву каталогов, корню которого находится в drive:path , и выполняет оператор for в каждом каталоге дерева. Если после /r каталог не указан, то в качестве корневого каталога используется текущий каталог. Если set — это всего лишь одна точка (.), он перечисляет только дерево каталогов. Синтаксис:
for /r [[<drive>:]<path>] {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]Итерации диапазона значений: Итеративная переменная позволяет задать начальное значение (start#), а затем выполнить шаг по диапазону значений до тех пор, пока значение не превысит конечное значение набора (end#). /l выполняет итеративный процесс, сравнивая start# с end#. Если start# меньше end#, команда выполняется. Когда итеративная переменная превышает end#, командная оболочка выходит из цикла. Вы также можете использовать отрицательный step# для пошагового перехода по диапазону в убывающих значениях. Например, (1,1,5) создает последовательность 1 2 3 4 5 и (5,-1,1) создает последовательность 5 4 3 2 1. Синтаксис:
for /l {%%|%}<variable> in (<start#>,<step#>,<end#>) do <command> [<commandlineoptions>]Итерацию и синтаксический анализ файлов: Используйте синтаксический анализ файлов для обработки выходных данных команд, строк и содержимого файла. Используйте итеративные переменные для определения содержимого или строк, которые вы хотите проверить, и используйте различные параметры parsingkeywords для дальнейшего изменения синтаксического анализа. Используйте опцию токена parsingkeywords , чтобы указать, какие токены должны передаваться в качестве итеративных переменных. При использовании без опции токена, /f будет проверять только первый токен.
Синтаксический анализ файлов состоит из чтения выходных данных, строки или содержимого файла, а затем разбиения их в отдельные строки текста и анализа каждой строки на ноль или несколько маркеров. Затем вызывается цикл for со значением итеративной переменной, равным токену. По умолчанию /f передает первый пустой разделенный маркер из каждой строки каждого файла. Пустые строки пропускаются.
Синтаксисы:
for /f [<parsingkeywords>] {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>] for /f [<parsingkeywords>] {%%|%}<variable> in (<literalstring>) do <command> [<commandlineoptions>] for /f [<parsingkeywords>] {%%|%}<variable> in ('<command>') do <command> [<commandlineoptions>]Аргумент set указывает одно или несколько имен файлов. Каждый файл открывается, читается и обрабатывается перед переходом к следующему файлу в наборе. Чтобы переопределить поведение синтаксического анализа по умолчанию, укажите ключевые слова для синтаксического анализа. Это строка с кавычками, содержащая одно или несколько ключевых слов, чтобы указать различные параметры синтаксического анализа.
Если вы используете опцию usebackq , используйте один из следующих синтаксисов:
for /f [usebackq <parsingkeywords>] {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>] for /f [usebackq <parsingkeywords>] {%%|%}<variable> in ('<literalstring>') do <command> [<commandlineoptions>] for /f [usebackq <parsingkeywords>] {%%|%}<variable> in (`<command>`) do <command> [<commandlineoptions>]В следующей таблице перечислены ключевые слова синтаксического анализа, которые можно использовать для синтаксического анализа.
Keyword Description eol= <c>Указывает конец строки (только один символ). skip= <n>Указывает количество строк, пропускаемых в начале файла. delims= <xxx>Задает набор разделителей. Это заменяет набор пробелов и вкладок по умолчанию. tokens= <x,y,m-n>Указывает, какие лексемы из каждой строки должны передаваться в цикл for для каждой итерации. В результате выделяются дополнительные имена переменных. m-n задает диапазон от mth до n-йлексем. Если последний символ в строке tokens= является звездочкой (*), то выделяется дополнительная переменная, которая получает оставшийся текст в строке после последнего анализируемого токена. usebackq Указывает, чтобы выполнить строку с обратной кавычками в качестве команды, использовать одну кавычки в качестве литеральной строки или для длинных имен файлов, содержащих пробелы, разрешать имена файлов в <set>каждом из них заключены в двойные кавычки.Подстановка переменных: В следующей таблице приведен необязательный синтаксис (для любой переменной I):
Переменная с модификатором Description %~IРазворачивает, удаляя %Iвсе окружающие кавычки.%~fI%IРасширяется до полного имени пути.%~dIРазвертывается %Iтолько на букву диска.%~pI%IРасширяет только путь.%~nIРазвертывается %Iтолько на имя файла.%~xIРазвертывается %Iтолько в расширение имени файла.%~sIРазвертывает путь, чтобы содержать только короткие имена. %~aIРазвертывается %Iк атрибутам файла.%~tI%IРасширяется до даты и времени файла.%~zIРазворачивается %Iдо размера файла.%~$PATH:IВыполняет поиск каталогов, перечисленных в переменной среды PATH, и расширяется %Iдо полного имени первого найденного каталога. Если имя переменной среды не определено или файл не найден поиском, этот модификатор расширяется до пустой строки.В следующей таблице перечислены сочетания модификаторов, которые можно использовать для получения составных результатов.
Переменная с объединенными модификаторами Description %~dpIРазвертывается %Iтолько на букву диска и путь.%~nxI%IРасширяется только на имя файла и расширение.%~fsI%IРасширяется до полного имени пути только с короткими именами.%~dp$PATH:IВыполняет поиск каталогов, перечисленных в переменной %Iсреды PATH, и расширяет букву диска и путь первого найденного.%~ftzaIРазворачивается %Iдо выходной линии, похожей на dir.В приведенных выше примерах можно заменить
%Iи ПУТЬ другими допустимыми значениями. Допустимое для переменной name завершает синтаксис %~ .Используя имена переменных верхнего регистра, например
%I, можно сделать код более читаемым и избежать путаницы с модификаторами, которые не учитывает регистр.
Анализ строки: Логику
for /fсинтаксического анализа можно использовать в немедленной строке, заключив<literalstring>в двойные кавычки (без использования usebackq) или в отдельных кавычках (с usebackq), например (MyString) или (MyString).<literalstring>обрабатывается как одна строка входных данных из файла. При синтаксическом анализе<literalstring>в двойных кавычках такие символы команд, как (\ & | > < ^), обрабатываются как обычные символы.Выходные данные разбора: Команду
for /fможно использовать для анализа вывода команды, поместив в скобки обратные кавычки<command>. Она рассматривается как командная строка, которая передается дочернему Cmd.exe. Выходные данные записываются в память и анализируются, как если бы это файл.
Examples
Чтобы использовать for в пакетном файле, используйте следующий синтаксис:
for {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]
Чтобы отобразить содержимое всех файлов в текущем каталоге с расширением .doc или .txt с помощью заменяемой переменной %f, введите:
for %f in (*.doc *.txt) do type %f
В предыдущем примере каждый файл с расширением .doc или .txt в текущем каталоге заменяется переменной %f до тех пор, пока не будет отображено содержимое каждого файла. Чтобы использовать эту команду в командном файле, замените каждое вхождение %f на %%f. В противном случае переменная игнорируется и отображается сообщение об ошибке.
Чтобы проанализировать файл, игнорируя закомментированные строки, введите:
for /f "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k
Эта команда анализирует каждую строку в myfile.txt. Он игнорирует строки, которые начинаются с точки с запятой, и передает вторую и третью лексему из каждой строки в тело for (лексемы разделяются запятыми или пробелами). Текст оператора for ссылается на %i для получения второго маркера, %j для получения третьего маркера, а %k для получения всех оставшихся маркеров. Если имена файлов, которые указаны, содержат пробелы, используйте кавычки вокруг текста (например, имя файла). Чтобы использовать кавычки, необходимо использовать usebackq. В противном случае кавычки интерпретируются как определение литеральной строки для синтаксического анализа.
%i явно объявляется в операторе for . %j и %k неявно объявляются с помощью tokens=. Вы можете использовать tokens= для указания до 26 токенов, если это не вызывает попытки объявить переменную выше буквы z или Z.
Чтобы проанализировать вывод команды, поместив set между скобками, введите:
for /f "usebackq delims==" %i in (`set`) do @echo %i
Чтобы выполнить рекурсивный цикл всех файлов в каталоге, включая подкаталогы и эхо полного пути, когда они были в последний раз изменены, и их размер файла, введите:
for /r "C:\My Dir\" %A in (*.*) do echo %~ftzA