Использование оператора FOR
Оператор FOR — это команда, которая позволяет «зацикливать» или повторять команды несколько раз. Он очень похож на оператор FOR, представленный в нескольких языках программирования. Оператор FOR часто используется в пакетных файлах, но его также можно использовать непосредственно в командной строке.
Напоминаем, что общий вид цикла FOR таков:
FOR %variable IN (set) DO command [command-parameters]
Где «переменная» — это одна буква, «(набор)» указывает набор из одного или нескольких файлов, «команда» — это команда командной строки, которая должна выполняться для каждого файла в наборе, а «параметры-команды» являются необязательными. параметры, передаваемые в ‘command’.
Допустим, вам предоставили несколько файлов COM .dll, которые необходимо зарегистрировать в реестре Windows. Вы можете поместить их все в одну папку и затем запустить следующую команду из этой папки:
C:\DLLs> FOR %i IN (*.dll) DO regsvr32 /s %i
Что это значит для каждого файла .dll, который он находит в текущем каталоге, — это запустить на нем программу regsvr32. (Переключатель «/ s» просто указывает regsvr32 выполнять свою работу без уведомления.) Используемая переменная («% i») чувствительна к регистру и принимает значение каждого файла .dll по очереди. Затем имя файла .dll передается в программу regsvr32 с использованием той же переменной «% i».
Вариант общего цикла FOR использует переключатель / L и имеет следующую общую форму:
FOR /L %variable IN (start,step,end) DO command [command-parameters]
Это выполняет цикл, в котором переменной% сначала присваивается значение «start», а затем увеличивается на «step», пока не будет достигнуто значение «end». (Это использование должно быть _ очень_ знакомо программистам.) Допустим, вам нужно отобразить список чисел от 1 до 5. Вы можете сделать это следующим образом:
C:\> FOR /L %i IN (1,1,5) DO @echo %i
Другой вариант цикла FOR использует переключатель / D и имеет следующую общую форму:
FOR /D %variable IN (set) DO command [command-parameters]
В этом варианте, если ‘set’ содержит символы подстановки, команда работает с именами каталогов, а не с именами файлов. Это может быть полезно, например, если вы хотите скопировать набор файлов из дерева каталогов и поместить все файлы в один каталог.
Например, у меня есть каталог \ Temp. Он содержит подкаталоги \ Temp \ Temp2 и \ Temp \ Barry. Каталоги \ Temp \ Barry и \ Temp \ Temp2 содержат файлы, которые я хочу скопировать. Если бы я хотел скопировать все файлы (без структуры каталогов) из дерева \ Temp в каталог с именем \ Files, я мог бы сделать это следующим образом:
C:\Temp> FOR /D %i IN () DO Copy %i\.* \Files
Я оставил до конца то, что считаю самой эзотерической формой цикла FOR. Кажется, что использование переключателя / F позволит вам делать почти все, если вы только сможете понять, как им пользоваться. Общая форма:
FOR /F "options" %variable IN (`command`) DO command [command-parameters]
(К сожалению, не все умещается в одной строке.) Есть несколько «опций, которые вы можете использовать, и первая« команда »(окруженная обратными апострофами) может быть любой командой командной строки. Итак, вот один пример того, как это использовать:
FOR /F "Usebackq Delims==" %i IN (`dir/b c:\temp\a*.tmp`) DO @echo c:\temp\%i | Findstr /f:/ "a b c"
(К сожалению, не все умещается в одной строке.) Эта команда выполняет команду DIR / B для C: \ Temp \ A.tmp. Для каждого найденного файла он повторяет имя файла и передает его команде Findstr, которая ищет все строки, содержащие «a», «b» или «c». Довольно странная вещь, конечно, но, по крайней мере, она показывает, как можно использовать / F. Я предлагаю вам сделать FOR /? *, Чтобы получить полный список всех возможных вариантов, и тогда вы в основном связаны только своим воображением, пытаясь понять, как его использовать.
Вы также можете использовать команду FOR в пакетном файле. Единственное отличие состоит в том, что вы удваиваете знак%, тогда как в командной строке вы используете только один знак%. Например, если второй приведенный выше пример поместить в пакетный файл, он будет выглядеть так:
FOR /L %%i IN (1,1,5) DO @echo %%i
Этот совет (13196) применим к Windows 7, 8 и 10.