Скрипт для удаления файлов до определенного часа в Windows?

Возникла необходимость удаления файлов, которые формируются в течении часа. Есть примеры, которые удаляют "позже определенного времени", но "до определенного времени" так и не нашел. Как написать скрипт, который удаляет файлы (.xlsx например), созданные не позже часу? Интересует вариант, работающий на стандартный средствах Windows.
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
@anykey_ua
Добрый день!
Как вариант использовать Powershell, но в условии проверки выставить обратную фильтрацию, не "старше" от текущей даты, а "новее".
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@res2001
Developer, ex-admin
Вчера отвечал на похожий вопрос, но у вас немного сложнее.
С помощью командного файла (cmd) можно это сделать примерно следующим образом:
Получить список файлов отсортированных в обратном порядке по времени модификации файла можно с помощью команды:
dir /n /-c /a-d /o-d /tw *.*
Вычислить время на час назад можно используя встроенную переменную %TIME%, которая возвращает текущее время. Переменная %DATE% - возвращает текущую дату. Не забудьте вариант смены суток. cmd не умеет работать с датой и временем, всю арифметику с датой/временем придется писать самому (выделять из %TIME% минуты и часы и производить с ними арифметические операции). Тут надо еще учесть, что числа, начинающиеся на 0 - для cmd восьмеричные и то что формат данных в %DATE% и %TIME% (и в выводе dir) зависит от установок текущей локали ОС.
В выводе dir будет время и дата, сравниваете ее с текущей датой и вычисленным временем и если надо удаляете файл. Т.к. файлы будут отсортированы в обратном порядке по дате/времени, то после первого файла не удовлетворяющего условию можно завершать обработку.
В помощь:
dir /?
for /? (ваш вариант for /f)
set /? (для арифметики: set /a)
Выделение подстроки из переменной описано в set /?

В целом все можно реализовать, но вычисление даты/времени на час назад может стать не тривиальной задачей, если учитывать переход суток (а так же переход даты - дней, месяцев и годов).
Так что, я думаю, что лучше предпочесть вариант на PoSh.
Ответ написан
Да вообще одной строкой делается.
Пример:
Get-ChildItem c:\inetpub\logs\LogFiles\ -Recurse -Filter *.log | Where-Object {$_.LastWriteTime -lt [datetime]::Today.AddMonths(-1)} | Remove-Item
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы