Forfiles
Forfiles — утилита командной строки для Microsoft Windows, предназначенная для выборки файлов по различным критериям (таким как имя файла и дата последнего изменения) и выполнения над ними заданной команды. Утилита поддерживает специальный синтаксис команд и может использоваться как непосредственно в командной строке, так и в пакетных файлах и других скриптах.
Команда Forfiles первоначально распространялась как дополнительная утилита в наборах ресурсов (Resource Kit) для Windows 98[1], Windows NT и Windows 2000[2]. Стала стандартной командой начиная с Windows Vista в рамках новых средств управления системой.
Что важно знать
| Forfiles | |
|---|---|
| Тип | Команда |
| Разработчик | Microsoft |
| Операционная система | Microsoft Windows |
| Лицензия | Проприетарная, коммерческая |
| Сайт | docs.microsoft.com/en-us… |
Использование
Команда Forfiles поддерживает ряд командных переключателей. Если параметры и переключатели не указаны, команда выводит имена всех файлов текущего каталога.
| Переключатель | Аргумент | Значение |
|---|---|---|
| /P | путь | Каталог для поиска файлов. По умолчанию — текущий каталог. UNC-пути (\\компьютер\ресурс) не поддерживаются. |
| /M | маска_поиска | Шаблон поиска (глоб-выражение). Будут выбраны только файлы, имя которых соответствует шаблону. Имя включает расширение; путь (имя папки) не учитывается. Шаблон должен совпадать со всем именем файла или содержать подстановочные знаки. По умолчанию совпадают все файлы.
Эта опция по-разному обрабатывает шаблоны |
| /S | (нет) | Осуществляет поиск совпадающих файлов во всех подкаталогах. По умолчанию просматривается только указанный каталог. |
| /C | команда | Выполняет заданную команду для каждого найденного файла. Команду обычно следует заключать в двойные кавычки. Ниже описан синтаксис внутри строки команды. Команда по умолчанию — CMD /C ECHO @FILE, которая выводит имена выбранных файлов.
|
| /D | дата | Выбор файлов по дате последнего изменения. Ниже приведён синтаксис для параметра даты. По умолчанию выбираются файлы любой даты. |
| /? | (нет) | Показывает справку (краткая инструкция по использованию). Отключает поиск файлов и выполнение команд. Нельзя использовать совместно с другими переключателями. |
Строка команды выполняется как указано, с некоторыми особенностями.
Последовательности вида 0xFF, где «0x» — литерально, а «FF» — две шестнадцатеричных цифры, заменяются соответствующим байтом. Это позволяет вставлять непечатные или расширенные символы ASCII.
Последовательность \" заменяется на кавычку ("). Также возможно использовать 0x22, что дополнительно скрывает кавычку от интерпретатора команд.
Внутри строки команды доступны специальные переменные — заполнители для информации о каждом файле. Использовать их не обязательно, но они требуются, если действие должно отличаться для разных файлов.
| Переменная | Значение |
|---|---|
| @file | Имя выбранного файла в двойных кавычках. |
| @fname | Имя файла без расширения в двойных кавычках. |
| @ext | Расширение файла (без точки) в двойных кавычках. Если расширений несколько — возвращается последнее. Для файлов без расширения — пустая строка в кавычках. |
| @path | Полный путь к файлу в двойных кавычках (с буквой диска и расширением, если есть). |
| @relpath | Относительный путь к файлу в двойных кавычках (от каталога, заданного в /P), начинается с .\ |
| @isdir | Строка TRUE, если объект — каталог, или FALSE, если нет.
|
| @fsize | Размер объекта в байтах (для каталогов — 0). |
| @fdate | Дата последнего изменения в локализованном формате пользователя. |
| @ftime | Время последнего изменения в локализованном формате пользователя. |
Переключатель даты (/D) позволяет выбирать файлы по дате их последнего изменения.
Аргумент даты может быть задан как конкретная дата в формате ММ/ДД/ГГГГ (другие форматы не принимаются). Альтернативно, можно указать число — будет выбрано всё, что изменено не менее чем N дней назад (N дней до текущей даты).
Если аргумент начинается с минуса (-), выбираются только файлы, изменённые на заданную дату или раньше (более старые). В остальных случаях (или при явном плюсе +) — файлы, изменённые на указанную дату или позже (более новые). В обоих случаях файлы, изменённые в саму дату, включаются. Нет способа выбрать только файлы с точно заданной датой.
Примеры
Следующая команда находит все лог-файлы (*.LOG) в каталоге Windows, изменённые не менее чем 30 дней назад, и выводит их имена и даты изменения.
C:\>FORFILES /P C:\Windows /M *.LOG /D -30 /C "CMD /C ECHO @FDATE @FILE"
6/12/2015 "iis7.log"
5/28/2015 "msxml4-KB954430-enu.LOG"
5/28/2015 "msxml4-KB973688-enu.LOG"
5/26/2015 "setuperr.log"
Следующей командой можно удалить те же файлы:
C:\>FORFILES /P C:\Windows /M *.LOG /D -30 /C "CMD /C DEL @PATH"
Использование CMD /C в примерах обязательно, поскольку команды ECHO и DEL являются внутренними для обработчика команд cmd.exe, а не отдельными программами.
Примечания
Литература
- FORFILES. — Microsoft, 13 июля 2009.
- Forfiles (англ.). TechNet. Microsoft (17 апреля 2012). Дата обращения: 28 апреля 2016.
- Simon Sheppard. FORFILES.exe (англ.). SS64. Дата обращения: 28 апреля 2016.


