2015-02-09 4 views
1

я вижу это - Batch file to delete files older than N daysПакетный файл для удаления файлов старше N часов или минут

Но как я могу удалить файлы старше N часов или минут?

Спасибо.

+0

Пожалуйста, не только для чтения наиболее проголосовали ответ, читайте также другие ответы. Несколько других ответов поддерживают также небольшие временные дельта, такие как [мой ответ] (http://stackoverflow.com/a/28395552/3074564), написанный вчера, который работает с секундами. – Mofi

+0

[См. Этот ответ] (http://stackoverflow.com/a/27297874/1683264) для других идей. – rojo

ответ

4

Его сложно сделать это (независимо от настройки даты времени) даже с WSH \ Jscript \ VBscript в WSH не возвращает объект даты, когда вы запрашиваете свойства даты/времени файла, но строка, которая зависит от (можно использовать wmi, но это повлияет на производительность). Я полагаю, вы установили инфраструктуру .net, которая делает задачу намного проще. Here's гибридный инструмент, который должен работать в вашем случае. Вы можете сохранить его с любым именем, которое вы хотите. Вот как использовать его (ее называют FileDateFilterJS.bat в данном примере):

@echo off 

for /f "tokens=* delims=" %%# in ('FileDateFilterJS.bat "." -hh -5') do (
    echo deleting "%%~f#" 
    echo del /q /f "%%~f#" 
) 

pause 

Где часы 5 - -hh -5 и каталог является текущим - "." .Вы можете удалить echo до del команды.

Этот сценарий занял у меня гораздо больше времени, чем я ожидал (несмотря на то, что я исследовал тему и готовил некоторые детали), и ее не испытывают так тяжело, поэтому, вероятно, она по-прежнему не работает без ошибок. И я полагаю, что помощь сообщение и варианты могут быть улучшены.

+1

'FSO.GetFile.DatePropertyOfSomeSort', кажется, обрабатывает 'Date()' математику объекта в шаге для меня. См. [Этот ответ] (http://stackoverflow.com/a/27297874/1683264) для примера. Я почти не хочу указывать на это, поскольку, похоже, вы потратили немало времени и сил на свой гибрид компании. 'o ° /' – rojo

+1

Да, подтверждено. 'WSH.Echo (typeof file.DateLastModified)' echoes 'date'. Ну, все равно +1. – rojo

+0

этот work.thanks – houngtze

1

Here's другой сценарий, который полагается только на WSH/JSCRIPT и почти тот же интерфейс (и не требует .net установлен) .Чтобы показать файлы старше 5 часов использования:

FileTimeFilterJS.bat "." -hh -5 -filetime modified 
1

Ни одно из решений здесь работал на меня. Они очень инновационные решения, и первый (.net/FileTimeFilerJS.bat [sic]) действительно работал один раз для меня. Однако, когда я попытался вызвать его в другой папке, он просто разбился. Я попробовал второй (jscript/FileTimeFilterJs.bat), но он не удалил все файлы старше одного часа.

Для решения этой проблемы требуется исполняемый файл, но я нашел, что это лучшее решение для меня.

Скачано FindUtils из GnuWin32 и извлечено 3 файла (вам нужно загрузить два ZIP-файла ниже): libintl3.dll, libiconv2.dll и find.exe (в сочетании они размером около 1 МБ). Я переименовал find.exe в gnu_find.exe, чтобы избежать команды Windows FIND.

Затем вы можете запустить прекрасную команду GNU (ниже команды для всех почтовых файлов старше 120 минут в папке, указанной в переменной окружения% Fldr%):

gnu_find %fldr% -name *[.:]zip -type f -mmin +120 -delete 

Вместо * .zip, я используйте * [.] zip, потому что Windows 7+ расширит * .zip, прежде чем find сможет его использовать.

Find Utils bin

Find Utils deps

Смежные вопросы