Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Выполняет указанную команду для каждого файла в наборе файлов.
Синтаксис
for {%% | %}<variable> in (<set>) do <command> [<commandlineoptions>]
Параметры
Параметр | Описание |
---|---|
{%% \| %}<variable> |
Обязательное. Представляет замещаемый параметр. Используйте единый знак (% ) для выполнения команды в командной строке. Используйте знаки двойного процента (%% ) для выполнения команды в пакетном файле. Переменные чувствительны к регистру, и они должны быть представлены с алфавитным значением, например %a, %bили %c. |
(<set> ) |
Обязательное. Задает один или несколько файлов, каталогов или текстовых строк или диапазон значений, в которых выполняется команда. Скобки обязательны. |
<command> |
Обязательное. Указывает команду, которую необходимо выполнить в каждом файле, каталоге или текстовой строке, или в диапазоне значений, включенных в набор. |
<commandlineoptions> |
Указывает все параметры командной строки, которые необходимо использовать с указанной командой. |
/? | Отображение справки в командной строке. |
Замечания
Эту команду можно использовать в пакетном файле или непосредственно из командной строки.
Следующие атрибуты применяются к команде :
Эта команда заменяет
% 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
затем указанная команда обрабатывает это значение. Это продолжается до тех пор, пока не обрабатываются все файлы (или группы файлов), соответствующие заданному значению.В и не являются параметрами, но их необходимо использовать с этой командой. Если вы опустите одно из этих ключевых слов, появится сообщение об ошибке.
Если расширения команд включены (то есть по умолчанию), поддерживаются следующие дополнительные формы:
Только каталоги: Если набор содержит подстановочные знаки (*или ?), указанная команда выполняется для каждого каталога (вместо набора файлов в указанном каталоге), соответствующего набору. Синтаксис:
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>]
Итерацию и синтаксический анализ файлов: Используйте синтаксический анализ файлов для обработки выходных данных команд, строк и содержимого файла. Итеративные переменные позволяют определить содержимое или строки, которые требуется проверить, и использовать различные параметры синтаксического анализа для дальнейшего изменения синтаксического анализа. Используйте параметр токена parsingkeywords , чтобы указать, какие маркеры должны передаваться в качестве итеративных переменных. При использовании без параметра токена /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>]
В следующей таблице перечислены ключевые слова синтаксического анализа, которые можно использовать для синтаксического анализа.
Ключевое слово Описание eol= <c>
Указывает конец строки (только один символ). пропустить= <n>
Указывает количество строк, пропускаемых в начале файла. Делимс= <xxx>
Задает набор разделителей. Это заменяет набор пробелов и вкладок по умолчанию. token= <x,y,m–n>
Указывает, какие маркеры из каждой строки передаются в цикл для каждой итерации. В результате выделяются дополнительные имена переменных. m-n задает диапазон от mth до N-thтокенов. Если последний символ в строке токенов = звездочка (*), выделена дополнительная переменная, и он получает оставшийся текст в строке после последнего маркера, который анализируется. usebackq Указывает, чтобы выполнить строку с обратной кавычками в качестве команды, использовать одну кавычки в качестве литеральной строки или для длинных имен файлов, содержащих пробелы, разрешать имена файлов в <set>
каждом из них заключены в двойные кавычки.Подстановка переменной: В следующей таблице перечислены необязательный синтаксис (для любой переменной I):
Переменная с модификатором Описание %~I
Разворачивает, удаляя %I
все окружающие кавычки.%~fI
%I
Расширяется до полного имени пути.%~dI
Развертывается %I
только на букву диска.%~pI
%I
Расширяет только путь.%~nI
Развертывается %I
только на имя файла.%~xI
Развертывается %I
только в расширение имени файла.%~sI
Развертывает путь, чтобы содержать только короткие имена. %~aI
Развертывается %I
к атрибутам файла.%~tI
%I
Расширяется до даты и времени файла.%~zI
Разворачивается %I
до размера файла.%~$PATH:I
Выполняет поиск каталогов, перечисленных в переменной среды PATH, и расширяется %I
до полного имени первого найденного каталога. Если имя переменной среды не определено или файл не найден поиском, этот модификатор расширяется до пустой строки.В следующей таблице перечислены сочетания модификаторов, которые можно использовать для получения составных результатов.
Переменная с объединенными модификаторами Описание %~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. В противном случае переменная игнорируется и отображается сообщение об ошибке.
Чтобы проанализировать файл, игнорируя закомментированные строки, введите:
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 неявно объявляются с помощью token=. Маркеры можно использовать для указания до 26 маркеров, если попытка объявить переменную выше буквы z или Z.
Чтобы проанализировать выходные данные команды, поместив между скобками, введите:
for /f "usebackq delims==" %i in (`set`) do @echo %i
Чтобы выполнить рекурсивный цикл всех файлов в каталоге, включая подкаталогы и эхо полного пути, когда они были в последний раз изменены, и их размер файла, введите:
for /r "C:\My Dir\" %A in (*.*) do echo %~ftzA