Последние два месяца я изучал инструмент 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