Использование оператора FOR

Оператор FOR – это команда, которая позволяет вам «зацикливать» или повторять команды несколько раз. Он очень похож на оператор FOR, представленный в нескольких языках программирования. Оператор FOR часто используется в пакетных файлах, но его также можно использовать непосредственно в командной строке.

Напоминаем, что общая форма цикла FOR:

 FOR% variable IN (set) DO command [command-parameters] 

Где ‘переменная’ – это одна буква, ‘(set)’ указывает набор из одного или нескольких файлов, ‘ 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% переменная IN (начало, шаг, конец) Команда DO [параметры-команды] 

Выполняет цикл, в котором для переменной% сначала устанавливается значение «начало», а затем увеличивается на «шаг», пока не будет достигнуто значение «конец». (Это использование должно быть очень знакомо программистам.) Допустим, вам нужно отобразить список чисел от 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 Копировать% i  *. *  Files 

Я оставил до конца то, что я считаю наиболее эзотерической формой цикла FOR. Похоже, что использование переключателя /F позволит вам делать почти все, если вы только сможете понять, как им пользоваться.. Общая форма выглядит так:

 FOR/F "options"% variable IN (`command`) DO command [command-parameters] 

(К сожалению, это не так все умещаются в одной строке.) Есть несколько «опций, которые вы можете использовать», и первая «команда» (окруженная обратными апострофами) может быть любой командой командной строки. Вот один пример того, как это использовать:

 FOR/F "Usebackq Delims =="% i IN (`dir/bc:  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 

Оцените статью
Frestage.ru
Добавить комментарий