Поделиться через


для

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

Синтаксис

for {%% | %}<variable> in (<set>) do <command> [<commandlineoptions>]

Параметры

Параметр Описание
{%% \| %}<variable> Обязательное. Представляет замещаемый параметр. Используйте единый знак (%) для выполнения команды в командной строке. Используйте знаки двойного процента (%%) для выполнения команды в пакетном файле. Переменные чувствительны к регистру, и они должны быть представлены с алфавитным значением, например %a, %b или %c.
(<set>) Обязательный. Задает один или несколько файлов, каталогов или текстовых строк или диапазон значений, в которых выполняется команда. Необходимо поставить скобки.
<command> Обязательный. Указывает команду, которую необходимо выполнить в каждом файле, каталоге или текстовой строке, или в диапазоне значений, включенных в набор.
<commandlineoptions> Указывает все параметры командной строки, которые необходимо использовать с указанной командой.
/? Отображение справки в командной строке.

Замечания

  • Эту команду можно использовать в пакетном файле или непосредственно из командной строки.

  • Следующие атрибуты применяются к команде:

    • Эта команда заменяет % variable или %% variable каждой текстовой строкой в указанном наборе, пока указанная команда не обрабатывает все файлы.

    • Имена переменных чувствительны к регистру, глобальные и не более 52 могут быть активными одновременно.

    • Чтобы избежать путаницы с параметрами пакетной службы, можно использовать любой символ для переменной, %9%0 кроме числовых 09. Для простых пакетных файлов один символ, например %%f , будет работать.

    • Можно использовать несколько значений для переменной в сложных пакетных файлах, чтобы различать различные заменяемые переменные.

  • Параметр set может представлять одну группу файлов или несколько групп файлов. Для указания набора файлов можно использовать дикие карта символы (*и ?). Ниже приведены допустимые наборы файлов:

    (*.doc)
    (*.doc *.txt *.me)
    (jan*.doc jan*.rpt feb*.doc feb*.rpt)
    (ar??1991.* ap??1991.*)
    
  • При использовании этой команды первое значение в наборе% variable заменяет или %% variableзатем указанная команда обрабатывает это значение. Это продолжается до тех пор, пока не обрабатываются все файлы (или группы файлов), соответствующие заданному значению.

  • В и не являются параметрами, но их необходимо использовать с этой командой. Если вы опустите любой из этих ключевое слово, появится сообщение об ошибке.

  • Если расширения команд включены (то есть по умолчанию), поддерживаются следующие дополнительные формы:

    • Только каталоги: если набор содержит дикие карта символы (*или ?), указанная команда выполняется для каждого каталога (вместо набора файлов в указанном каталоге), соответствующего набору. Синтаксис:

      for /d {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]
      
    • Рекурсивный: выполняет инструкцию в каждом каталоге дерева дерева, корняемого в drive:path , и выполняет инструкцию for в каждом каталоге дерева. Если каталог не указан после /r, текущий каталог используется в качестве корневого каталога. Если задано только один период (.), он перечисляет только дерево каталогов. Синтаксис:

      for /r [[<drive>:]<path>] {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]
      
    • Итерации диапазона значений. Используйте итеративную переменную, чтобы задать начальное значение (start#), а затем выполнить шаг по набору значений до тех пор, пока значение не превысит конечное значение набора (end#). /l выполняет итеративный метод, сравнивая start# с end#. Если start# меньше конца# выполняется команда. Когда итеративная переменная превышает конец#, командная оболочка выходит из цикла. Вы также можете использовать отрицательный шаг# для шага по диапазону в уменьшении значений. Например, (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>]
      
    • Итерацию и синтаксический анализ файлов: используйте синтаксический анализ файлов для обработки выходных данных команд, строк и содержимого файла. Итеративные переменные позволяют определить содержимое или строки, которые требуется проверить, и использовать различные параметры синтаксического анализа ключевое слово s для дальнейшего изменения синтаксического анализа. Используйте параметр маркера синтаксического анализа ключевое слово s, чтобы указать, какие маркеры должны передаваться в качестве итеративных переменных. При использовании без параметра токена /f будет проверять только первый маркер.

      Синтаксический анализ файлов состоит из чтения выходных данных, строки или содержимого файла, а затем разбиения их в отдельные строки текста и анализа каждой строки на ноль или несколько маркеров. Затем цикл для цикла вызывается с итеративным значением переменной, заданным для маркера. По умолчанию /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>]
      

      В следующей таблице перечислены ключевое слово синтаксического анализа, которые можно использовать для синтаксического анализа ключевое слово.

      Ключевое слово Description
      eol=<c> Указывает конец строки (только один символ).
      skip=<n> Указывает количество строк, пропускаемых в начале файла.
      delims=<xxx> Задает набор разделителей. Это заменяет набор пробелов и вкладок по умолчанию.
      token=<x,y,m–n> Указывает, какие маркеры из каждой строки передаются в цикл для каждой итерации. В результате выделяются дополнительные имена переменных. m-n задает диапазон от mth до N-thтокенов. Если последний символ в строке токенов = звездочка (*), выделена дополнительная переменная, и он получает оставшийся текст в строке после последнего маркера, который анализируется.
      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 и ПУТЬ другими допустимыми значениями. Допустимое имя переменной %~ заканчивает синтаксис.

      Используя имена переменных верхнего регистра, например %I, можно сделать код более читаемым и избежать путаницы с модификаторами, которые не учитывает регистр.

  • Синтаксический анализ строки: логику синтаксического анализа можно использовать for /f в немедленной строке, заключив <literalstring> в двойные кавычки (без usebackq) или в одинарных кавычках (с использованием usebackq) --например, (MyString) или (MyString). <literalstring> обрабатывается как одна строка входных данных из файла. При синтаксическом анализе <literalstring> в двойных кавычках такие символы команд, как (\ & | > < ^), обрабатываются как обычные символы.

  • Анализ выходных данных. Для анализа выходных данных команды можно использовать for /f команду, поместив обратную кавычку <command> между скобками. Она рассматривается как командная строка, которая передается дочернему Cmd.exe. Выходные данные записываются в память и анализируются, как если бы это файл.

Примеры

Чтобы использовать в пакетном файле, используйте следующий синтаксис:

for {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]

Чтобы отобразить содержимое всех файлов в текущем каталоге с расширением .doc или .txt с помощью заменяемой переменной %f, введите:

for %f in (*.doc *.txt) do type %f

В предыдущем примере каждый файл с расширением .doc или .txt в текущем каталоге заменяется переменной %f до отображения содержимого каждого файла. Чтобы использовать эту команду в пакетном файле, замените каждое вхождение %f %f%%f. В противном случае переменная игнорируется и отображается сообщение об ошибке.

Чтобы проанализировать файл, игнорируя закомментированные строки, введите:

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 неявно объявляются с помощью токенов=. Маркеры можно использовать для указания до 26 маркеров, если попытка объявить переменную выше буквы z или Z.

Чтобы проанализировать выходные данные команды, поместив между скобками, введите:

for /f "usebackq delims==" %i in (`set`) do @echo %i

Чтобы выполнить рекурсивный цикл всех файлов в каталоге, включая подкаталогы и эхо полного пути, когда они были в последний раз изменены, и их размер файла, введите:

for /r "C:\My Dir\" %A in (*.*) do echo %~ftzA