Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Выполняет указанную команду для каждого файла в наборе файлов.
Синтаксис
for {%% | %}<variable> in (<set>) do <command> [<commandlineoptions>]
Параметры
Параметр | Описание |
---|---|
{%% \| %}<variable> |
Обязательное. Представляет замещаемый параметр. Используйте единый знак (% ) для выполнения команды в командной строке. Используйте знаки двойного процента (%% ) для выполнения команды в пакетном файле. Переменные чувствительны к регистру, и они должны быть представлены с алфавитным значением, например %a, %b или %c. |
(<set> ) |
Обязательный. Задает один или несколько файлов, каталогов или текстовых строк или диапазон значений, в которых выполняется команда. Необходимо поставить скобки. |
<command> |
Обязательный. Указывает команду, которую необходимо выполнить в каждом файле, каталоге или текстовой строке, или в диапазоне значений, включенных в набор. |
<commandlineoptions> |
Указывает все параметры командной строки, которые необходимо использовать с указанной командой. |
/? | Отображение справки в командной строке. |
Замечания
Эту команду можно использовать в пакетном файле или непосредственно из командной строки.
Следующие атрибуты применяются к команде:
Эта команда заменяет
% variable
или%% variable
каждой текстовой строкой в указанном наборе, пока указанная команда не обрабатывает все файлы.Имена переменных чувствительны к регистру, глобальные и не более 52 могут быть активными одновременно.
Чтобы избежать путаницы с параметрами пакетной службы, можно использовать любой символ для переменной,
%9
%0
кроме числовых 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>]
Итерацию и синтаксический анализ файлов: используйте синтаксический анализ файлов для обработки выходных данных команд, строк и содержимого файла. Итеративные переменные позволяют определить содержимое или строки, которые требуется проверить, и использовать различные параметры синтаксического анализа ключевое слово 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