Possible Duplicate:
Batch file to delete files older than N days
Я хочу запустить запланированную задачу Windows, которая удаляет все файлы из каталога старше 2 недель.
Причина в том, что это журналы IIS и Tomcat, которые заполняют мой сервер, но я хочу сохранить самые последние журналы на случай, если мне понадобится исследовать проблему.
Кто-нибудь знает простой способ сделать это?
Ваше здоровье
Ниг





Почему бы вам не написать командный файл или сценарий PowerShell и не запланировать его?
Сценарий для удаления файлов старше указанной даты.
Запланируйте пакетный файл, чтобы справиться с этим.
Эта строка удалит все файлы (*. *) В c: \ mydirectory старше 14 дней:
FORFILES -pc:\mydirectory -s -m*.* -d-14 -c"DEL @FILE"
Поместите это в текстовый файл, переименуйте его во что-то вроде «deletefiles.bat» и запланируйте его.
Я не тестировал это, но должно быть достаточно легко попробовать.
Обновлено: если вы используете это, убедитесь, что вы понимаете, что происходит - флаг -s сообщает ему, что нужно рекурсировать подкаталоги, и это может быть не то, что вы хотите. Кроме того, вам может потребоваться указать некоторые флаги для команды DEL. :)
Обновлено: Понял, что вам нужно скачивать материалы из Microsoft, чтобы FORFILES работал. Мне тоже нравится принятое решение, потому что ничего особенного быть не должно. Единственная проблема заключается в том, что это происходит только каждые две недели, вместо того, чтобы запускать процесс ежедневно для удаления всего, что старше 14 дней. Чего это стоит. :П
При запуске я получаю сообщение об ошибке: невозможно выполнить DEL <filename> <error 2>. Есть идеи, почему или что может вызвать это?
Вне моей головы, поскольку у меня нет времени смотреть на данный момент, я полагаю, что это как-то связано с запуском сценария от имени администратора. Вам, вероятно, придется куда-то добавить команду runas. Посмотрите синтаксис, но он, вероятно, войдет в последнюю процитированную часть, например "runas <runas options> DEL @FILE". Сообщите мне, что вы узнали, я не запускал этот сценарий, так как я надеялся на Windows 7 прошлым летом, вероятно, поэтому я не столкнулся с этим.
Да, вы, вероятно, можете просто запустить командный файл от имени администратора и не показывать его в каждой строке "DEL @FILE" ... Мне действительно нужно больше сна!
Это довольно просто сделать, если на сервере установлен perl (или аналогичный):
#!perl
foreach my $file (</path/to/logs/*.log>) {
next unless -M $file > 14;
print "Deleting $file...\n";
# unlink $file or die "Failed to remove $file: $!";
}
Строка, которая на самом деле удаляет, закомментирована, так как в доме могут быть дети :)
Самый простой способ - запускать файл .bat еженедельно или ежемесячно.
cd \mylog\dir
mkdir archive
del /Q .\archive\*.log
move *.log .\archive
Если вы хотите что-то более сложное, изучите загрузку инструментов cygwin для использования un * x-подобных команд или, возможно, загляните в Powershell.
С VBScript, адаптированным из Ответы на скрипты
Dim fso, startFolder, OlderThanDate
Set fso = CreateObject("Scripting.FileSystemObject")
startFolder = "E:\temp" ' folder to start deleting (subfolders will also be cleaned)
OlderThanDate = DateAdd("d", -07, Date) ' 07 days (adjust as necessary)
DeleteOldFiles startFolder, OlderThanDate
Function DeleteOldFiles(folderName, BeforeDate)
Dim folder, file, fileCollection, folderCollection, subFolder
Set folder = fso.GetFolder(folderName)
Set fileCollection = folder.Files
For Each file In fileCollection
If file.DateLastModified < BeforeDate Then
' fso.DeleteFile(file.Path) # Modify this to delete after testing
WScript.StdOut.WriteLine (file.Path)
End If
Next
Set folderCollection = folder.SubFolders
For Each subFolder In folderCollection
DeleteOldFiles subFolder.Path, BeforeDate
Next
End Function
Вы можете запустить этот скрипт с помощью CScript
@Jason: отличная утилита, FORFILES из Resource Kit
точный синтаксис:FORFILES /p d:\new /d -30 /m * /c "cmd /c del @file"
Новый метод, основанный на файле .BAT, который использует только внутренние команды CMD.EXE, был размещен здесь: stackoverflow.com/questions/9746778/…