for

Выполняет указанную команду для каждого файла в наборе файлов.

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