Выполнение команды для набора файлов. Команда For

Команда For позволяет выполнить некоторую команду для нескольких файлов из указанного списка. Она может употребляться не только в командных файлах, но и вводиться пользователем в командной строке MS-DOS. Формат команды:

For %x in (список)команда

где х- любой символ, кроме ‘0’, ‘1’, …, ‘9’ (это ограничение нужно для того, чтобы не было совпадений с параметрами %0 - %9 в командном файле);

список - одно или несколько имен файлов, разделенных пробелами. В именах файлов можно использовать символы ‘*’ и ‘?’;

команда - любая программа или команда MS-DOS, кроме команды For. Если в команде употреблено выражение %x, тогда оно заменяется именами файлов из списка.

Примеры использования команды For в командной строке MS-DOS:

1. Для всех файлов из текущего каталога с расширением .asm вызвать макроассемблер MASM:

For %a in (*.asm) do masm %a

2. Сравнить файлы с расширениями .PAS и .ЕХЕ из текущего каталога с такими же файлами на диске А:

For %b in (*.pas *.exe) do Fc %b A:%b

3. Копировать все файлы из текущего каталога с именами, начинающимися с цифры, в текущий каталог диска D:

For %c in (1 2 3 4 5 6 7 8 9) do Copy %c*.* D:

Замечание. Если команды For используется в пакетном файле, а не в командной строке MS-DOS, тогда вместо аргумента %x надо указывать %%x (см. пример ниже).

Пример. Вызов команды For в командном файле. Для того, чтобы команды, приведенные в предыдущем примере, правильно работали в пакетном файле, их надо записать так:

For %%a in (*.asm) do masm %%a

For %%b in (*.pas *.exe) do Fc %%b A:%%b

For %%c in (1 2 3 4 5 6 7 8 9) do Copy %%c*.* D:

Замечание. Если на диске имеются длинные имена файлов или каталогов, созданные в Windows 95/98 или Windows NT, тогда команда For по умолчанию не будет замечать эти имена, а будет обрабатывать только соответствующие им короткие имена. В MS-DOS 7.0 Вы можете переключить команду For на работу с длинными именами. Для этого перед командой For надо выдать команду ‘LfnFor On’. Для возврата к работе с короткими именами нужно выдать команду ‘LfnFor Off’.