Последние два месяца я изучал инструмент Chml, который написал для работы с новыми функциями Windows Vista — уровнями целостности. Но при этом я не позаботился о поддержке групповых символов. Поэтому при переходе на уровень сохранности всех файлов с именами, начинавшимися с символа s, на высокий уровень целостности — High это оказалось невозможно. В идеале надо было бы просто ввести команду

chml s* -i:h

чтобы достичь желаемого результата. Но тут я подумал, что добавлять поддержку метасимволов шаблона не требуется — всю необходимую функциональность может выполнить For, классическая команда встроенного командного интерпретатора Windows.

Команда For

Команда For — известный инструмент Windows. По существу, ее задача заключается в том, чтобы автоматически выбрать несколько файлов или папок по заданному критерию, а затем последовательно выполнить данную команду для каждого файла. Синтаксис команды For выглядит так:

for % in () do

где filenamefilter (шаблон имени файлов) обозначает, какие файлы обрабатываются командой For, command обозначает, какие команды запускаются в For. В указанном примере задан шаблон имен файлов (s*), задающий все файлы (и папки), имена которых начинаются с буквы s. Итак, надо ввести

for %a in (s*) do chml %a -i:h

Эта команда выполняет обработку группового шаблона, просматривая текущую папку и отыскивая файлы с именами, которые начинаются с буквы s, вызывая команду Chml для каждого из найденных файлов, а затем возвращаясь к этой папке для поиска других файлов, удовлетворяющих критерию поиска. Запуск команды For аналогичен тому, как если бы администратор сначала нашел, какие файлы имеют имена, начинающиеся с «s», затем ввел бы команду Chml для этого файла, но, конечно, лучше работать с командой For.

Требуемая команда имеет вид:

chml <имя файла> -i:h.

Значение переменной variablename (имя переменной) подставляется на место элемента имя файла этой команды. По мере того как команда For обрабатывает последовательность файлов, согласующихся с шаблоном имен файлов, ей требуется переменная для резервирования имени файла — именно эту роль выполняет переменная %a, значение которой командный интерпретатор Windows подставляет при выполнении команды For.

Итак, если текущий каталог содержит три файла — sit .txt, hi.exe и salt.dat, то команда For сначала находит файл sit.txt и помещает его в переменную %a. Затем команда For переходит к команде

chml %a -i:h

и подставляет sit.txt вместо %a. Результатом будет команда

chml sit.txt -i:h

Это точный текст команды, которую команда For затем выполнит. После чего команда For найдет salt.dat (файл hi.exe не соответствует шаблону s*) и на этот раз построит команду:

chml salt.dat -i:h

Теперь уже For не найдет больше подходящих имен файлов и остановится.

Это простейший из вариантов использования команды For: выполняется поиск всех подходящих файлов в текущей папке. Команда For позволяет также обеспечить рекурсивную обработку файлов во вложенных папках. Добавление ключа /r после команды For приведет к тому, что For будет не только просматривать текущую папку, но и выполнит поиск в подпапках (и во всех вложенных папках более низких уровней) текущей папки. Такая команда будет выглядеть следующим образом

for /r %a in (s*) do chml %a -i:h

Заключение

Команда For относится к тем утилитам Windows, о которых мало говорят, а может быть, даже тем пользователям, которые хорошо знают Windows, неизвестна эта команда. Я лишь кратко описал ее возможности — подробнее об этом будет рассказано в следующем номере.

Марк Минаси - Редактор Windows IT Pro, MCSE и автор книги Mastering Windows Server 2003  (издательство Sybex). mark@minasi.com