Делаю бекапы каждый день, накапливается не один десяток гигабайт информации. Чистить нужно, тем более старые бекапчики особой важности не несут. Раньше удалял вручную, но потом задумался… Вручную делать это лень, тем более можешь завтыкать, протупить и удалить не то. Короче, ленивый сделает лучше всех — нужно автоматизировать.
Воспользовался встроенной утилитой forfiles. Теперь все делает планировщик задач и несложный bat-ник в две строки. Пример дальше.
Команды forfiles. Примеры
Вот так примерно выглядит команда для отображения всех файлов с расширением .rar на диске С старше 10-ти дней:
forfiles /p C:\ /m *.rar /s /d -10 /c «cmd /c echo @path»
Разберем ключи по порядку:
/p — пусть для проверки. В примере диск C:\
/m — маска для поиска. Можно не задавать, если хотим убрать все файлы в папке. В примере все архивы с расширением .rar
/s — сканируем вложенные папки в том числе.
/d — дата. Можно задать в формате dd.mm.yyyy или dd. У нас -10 дней, можно указать +N дней. Про +N дней читайте далее.
/c — команда. Ключевое что нам нужно — собственно что мы будем делать с файлами. В командах также можно использовать переменные:
@path — показывает полный путь к файлу и его имя.
@relpath — показывает путь к файлу только в сканируемой папке.
@file — имя файла полностью с расширением.
@fname — только имя файла, без расширения.
@ext — только расширение имени файла.
@isdir — проверка типа файла — папка или файл. Возвращает true, если папка, и false для файлов.
@fsize — возвращает размер файла в байтах.
@fdate — возвращает дату последнего изменения файла.
@ftime — возвращает время последнего изменения файла.
Также результаты исполнения скрипта можно записать в файл.
Пример использования forfiles — отобразить все файлы .zip на диске и записать их в файл
Следующий код отобразит все Ваши исполняемые файлы .exe:
forfiles /p C:\ /m *.exe /s /c «cmd /c echo @path»
Если нужно их записать в файл, то добавьте в конце знак БОЛЬШЕ и адрес куда сохранить файл (лучше всего прописать полный путь).
forfiles /p C:\ /m *.exe /s /c «cmd /c echo @path» > D:\all_exefiles.txt
Вставляем код в cmd:
Результат — созданный файл на диске D:\ и его содержимое (можно много интересного найти):
Пример forfiles с переменными путь, дата, размер
Давайте вызовем все наши файлы с диска D:\ с расширением .zip, а выведем их на экран с адресом, датой и размером файла. Используем скрипт:
forfiles /p D:\ /m *.zip /s /c «cmd /c echo @path изменен @fdate и размером @fsize байт »
Вот результат выполнения скрипта:
Как удалить файлы старше 10 дней
Чаще всего forfiles используют как раз для задачи удаления устаревших файлов. Вот Вам cmd скрипт для удаления старых файлов (в примере старше 10 дней):
forfiles /p C:\ /m *.rar /s /d -10 /c «cmd /c del @path /q»
Как удалить папки старше 7 дней с помощью forfiles
Кроме самих файлов не лишним будет удалять и папки, тем более если они будут пустые (без файлов). Код:
forfiles /p C:\downloads /s /d -7 /c «cmd /c rmdir /s del @path /q»
В этом примере я написал уже 7 дней. Для удаления папок мы используем rmdir, ключ /s — для сканирования вложенных папок, del — команда удаления, /q — удаление без подтверждения.
forfiles выбирает объекты по дате изменения, а надо по дате создания
По дате как я понял сложный скрипт (пример легко находится в англоязычном сегменте). Может легче рассмотреть на другом языке программирования.
ОШИБКА: Синтаксическая ошибка. Использование параметра ‘/c’ не разрешено более ‘1’ раз(а).
Введите «FORFILES /?» для получения справки по использованию.
Проверьте кавычки, в статье все правильно
возможно не ставите где-то, и /с дважды считается.
В тексте про это не нашёл )
последние два параграфа (старше 10, 7 дней) — это оно и есть
вообще не корректно. в теме «удалить файлы старше .. » а на самом деле forfiles работает с датой последнего изменения, а это не связано с возрастом файла.
Не могу точно подсказать. Была как то задача удалять архивы, они не изменялись. По созданию файлов и ориентировались
КМК, в контексте этой задачи так даже лучше будет.
А как удалить не все а только один файл , самый старый по дате?
Вам какое решение нужно? в .bat?
Полезно.
Только кавычки поменяйте на «, а то не работает при копировании скрипт
это движок меняет, в консоли просто исправьте и все
Скриптами до этого не занимался, недавно решил попробовать скрипт на удаление лог файлов в exchange наткнулся на этот скрипт,можете подсказать как можно сделать что бы он удалял только определенный тип файлов.
Все просто, в /p указываете путь к папке, а в маске /m *.log (все лог файлы)