Необходимость автоматизации определенных задач — одна из главных причин, заставляющих нас применять инструменты командной строки, не имеющие графического пользовательского интерфейса. Часто главное затруднение заключается не в поиске подходящих команд для выполнения той или иной задачи, а в том, что для автоматизации действия требуется владение языком сценариев типа PowerShell или VBScript. Можно было бы вспомнить команду For, которая, по существу, позволяет создавать сценарий без использования языка создания сценариев. Она дает возможность применять некоторые команды для последовательности файлов и папок. Теперь рассмотрим похожий инструмент — Forfiles, который в определенной степени превосходит команду For. Forfiles наконец включена в стандартную установку Windows Vista, при том что она входила в пакет Resource Kit начиная с Windows 98.

Необычный синтаксис

К синтаксису команды Forfiles привыкнуть сложно, но инструмент настолько полезен, что на многое можно закрыть глаза. В основном Forfiles находит последовательность папок для файлов и папок, соответствующих определенным критериям, например все файлы с расширением .exe в папке C:myfiles (включая ее подкаталоги), в которые вносились изменения в течение последних десяти дней. Для файлов или папок, обнаруженных Forfiles, этот инструмент создает переменные с такими именами, как @file, @ext, @path и т.д., в которых хранится определенная информация (например, имя папки или файла, его расширение, полная спецификация файла, его размер, является ли объект файлом или папкой, дата или время последнего исправления). Forfiles имеет ключи, с помощью которых задаются действия над папками или файлами.

Основных ключей в Forfiles пять. Первый,/p (путь), задает для Forfiles область поиска, например /p C: или /p C:datafiles. Чтобы Forfiles показывала все файлы в папке с именем E: datafiles, надо ввести

forfiles/p E:datafiles

Это задание не демонстрирует особую ценность данной команды, поскольку ту же задачу выполняет команда Dir E:datafiles. Это пример неудачного синтаксиса Forfiles.

Другое задание — как использовать Forfiles, чтобы показать файлы с именами, которые начинаются с буквы t? Естественно было бы предположить, что надо ввести в командной строке Windows команду:

forfiles/p E:datafiles *

Однако эта команда не сработает, потому что ключ /p в Forfiles предназначен только для указания пути. Чтобы использовать групповой символ для фильтрации файлов и папок, задаваемых этим ключом, надо добавить ключ /m, который задает маску, или трафарет, для Forfiles. Непонятно, зачем понадобилось так усложнять знакомый и простой способ задавать путь с групповыми символами.

Третий ключ, /s (для подкаталогов), употребляется без параметров. Как в случае многих других инструментов командной строки Windows, этот ключ Forfiles задает поиск не только для заданного пути, но и во всех его подкаталогах.

Ключ /d (дата) позволяет выделять файлы по значению измененной даты. Для выполнения задания включать только файлы, измененные n дней назад, надо добавить ключ с параметром: /d -n, где n — число от 0 до 32767. Таким образом, чтобы увидеть файлы из папки E:datafiles, измененные три дня назад, следует ввести команду

forfiles/p E:datafiles/d –3

Можно также ввести ключ /d с параметром, задающим для отображения файлы, измененные до или после определенной даты. Если ввести этот ключ с параметром даты в формате +mm/dd/yyyy, можно выделить файлы, измененные после указанной даты; ввод /d –mm/dd/yyyy покажет файлы, измененные до этой даты. Например, чтобы показать файлы, в которых последнее изменение было 1 июня 2006 г. или до этой даты, надо ввести в командной строке

forfiles /p E:datafiles /d –06/01/2006

Последний ключ Forfiles/c (команда) указывает, что необходимо сделать с найденными файлами и папками. Если этот ключ не задавать, Forfiles просто покажет, какие файлы были обнаружены. Однако ключ /c позволит сделать значительно больше, но об этом — в следующий раз.

Итак, For — прекрасная команда, и в определенных случаях ею пользоваться проще, чем командой Forfiles. Однако с помощью Forfiles легче выделять файлы и папки, удовлетворяющие заданным критериям, включая критерии размера файла и даты изменения. Более того, Forfiles позволяет просто задавать команды, позволяющие манипулировать только частью имени файла. Несомненно, Forfiles станет замечательным дополнением к вашему набору инструментов.