Делаю бекапы каждый день, накапливается не один десяток гигабайт информации. Чистить нужно, тем более старые бекапчики особой важности не несут. Раньше удалял вручную, но потом задумался… Вручную делать это лень, тем более можешь завтыкать, протупить и удалить не то. Короче, ленивый сделает лучше всех — нужно автоматизировать.
Воспользовался встроенной утилитой forfiles. Теперь все делает планировщик задач и несложный bat-ник в две строки. Пример дальше.
Вот так примерно выглядит команда для отображения всех файлов с расширением .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 — возвращает время последнего изменения файла.
Также результаты исполнения скрипта можно записать в файл.
Следующий код отобразит все Ваши исполняемые файлы .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:\ и его содержимое (можно много интересного найти):
Давайте вызовем все наши файлы с диска D:\ с расширением .zip, а выведем их на экран с адресом, датой и размером файла. Используем скрипт:
forfiles /p D:\ /m *.zip /s /c «cmd /c echo @path изменен @fdate и размером @fsize байт »
Вот результат выполнения скрипта:
Чаще всего forfiles используют как раз для задачи удаления устаревших файлов. Вот Вам cmd скрипт для удаления старых файлов (в примере старше 10 дней):
forfiles /p C:\ /m *.rar /s /d -10 /c «cmd /c del @path /q»
Кроме самих файлов не лишним будет удалять и папки, тем более если они будут пустые (без файлов). Код:
forfiles /p C:\downloads /s /d -7 /c «cmd /c rmdir /s del @path /q»
В этом примере я написал уже 7 дней. Для удаления папок мы используем rmdir, ключ /s — для сканирования вложенных папок, del — команда удаления, /q — удаление без подтверждения.
Очень много разговоров в последнее время за токен NOT. Много бирж будут делать листинг токена,…
Телеграм недавно запустил возможность стейкать (замораживать) USDT и получать за это их валюту TON. Очень…
Биржа криптовалют Binance проводит сейчас промо-акцию: новым пользователям дают ваучеры в сумме 110 долларов. Деньги…
Самый главный момент в работе с youtube - это получить ключ api через консоль разработчика…
Арендую сервер для небольшого проекта на python. И вот приходит мне уведомление, что за сутки…
Тестирую одну схему, и нужно на много видео наложить watermark. Решил делать через Python 3,…
View Comments
forfiles выбирает объекты по дате изменения, а надо по дате создания :(
По дате как я понял сложный скрипт (пример легко находится в англоязычном сегменте). Может легче рассмотреть на другом языке программирования.
ОШИБКА: Синтаксическая ошибка. Использование параметра '/c' не разрешено более '1' раз(а).
Введите "FORFILES /?" для получения справки по использованию.
Проверьте кавычки, в статье все правильно :)
возможно не ставите где-то, и /с дважды считается.
В тексте про это не нашёл )
последние два параграфа (старше 10, 7 дней) - это оно и есть :)
вообще не корректно. в теме "удалить файлы старше .. " а на самом деле forfiles работает с датой последнего изменения, а это не связано с возрастом файла.
КМК, в контексте этой задачи так даже лучше будет.
Не могу точно подсказать. Была как то задача удалять архивы, они не изменялись. По созданию файлов и ориентировались
А как удалить не все а только один файл , самый старый по дате?
Вам какое решение нужно? в .bat?
Полезно.
Только кавычки поменяйте на ", а то не работает при копировании скрипт
это движок меняет, в консоли просто исправьте и все :)
Скриптами до этого не занимался, недавно решил попробовать скрипт на удаление лог файлов в exchange наткнулся на этот скрипт,можете подсказать как можно сделать что бы он удалял только определенный тип файлов.
Все просто, в /p указываете путь к папке, а в маске /m *.log (все лог файлы)