c:\WINNT\system32\cmd.exe
Андрей "Дронич" Михайлюк (dronich@real.xakep.ru)
Ох, уж эти женские циклы!
(с) by Хрюндель сотоварищи
Если кто-то еще не воткнул, сообщаю: сегодня мы мучаем святую святых CMD - циклы FOR. Прошлый раз я уже применил навороченную конструкцию FOR'a, теперь же мы будем разбирать его и его родственников гораздо подробнее. Зачем? Циклами делается большинство операций с файлами, ведь перебирать их руками - сущий кошмар. А работа с файлом - основное назначение батников. Убедил? Будем считать, что да

.
Итак, основная конструкция выглядит следующим образом:
FOR %%i IN (*.txt) DO command %%i
%%i - это переменная цикла, в нее по очереди подставляются значения из набора, указанного после IN. В наборе простого цикла содержится маска или список имен файлов, для каждого из которых выполняется некоторая команда. Чтобы команда взаимодействовала с файлом, необходимо прописать переменную на место параметра команды, отвечающего за файл (в основном этот параметр первый). Простенький пример: откроем все CMD-файлы в текущей директории для правки в новом окне.
FOR %%i IN (.\*.cmd) DO start edit.com %%i
Таким простейшим циклом уже можно выполнять тучу полезных вещей, но мы пойдем дальше - в MS для нас придумали циклы с параметрами. Поглядим на них по порядку.
FOR /D %%i IN (win*) DO command %%i
Этот цикл будет выполнять команды для директорий, а не для файлов, соответственно после IN указывается список директорий (в этом примере - все, начинающиеся с WIN).
FOR /R C:\WINNT\ %%i IN (win*) DO command %%i
Такой цикл будет искать файлы, начинающиеся с WIN во всех подкаталогах C:\WINNT\, и выполнять команду для каждого из них.
FOR /L %%i IN (6,1,10) DO command %%i
При составлении отчетов для вывода на экран или генерации файлов этот цикл незаменим. В нашем примере переменная %%i будет принимать значения от тройки до десятки с шагом в единицу (6, 7, 8, 9, 10). Шаг, кстати, легко может быть отрицательным, равно как и оба значения - начальное и конечное. Правда, пригодится вряд ли

.
FOR /F ["параметры"] %%i IN ([список файлов] или ["строка"] или ['команда']) DO command %%i
Самый страшный и самый функциональный цикл

. Он открывает файлы, обрабатывает в них строки с заданными параметрами и выполняет команду для слов из каждой подходящей строки (по дефолту словом считаются символы, отделенные от остатка строки пробелами или табуляцией). Его мы применяли в прошлый раз, сегодня же рассмотрим во всей красе.