Как мне удалить старые файлы из каталога, сохранив самые последние в Windows [дублировать]
-
09-06-2019 - |
Вопрос
Возможный Дубликат:
Пакетный файл для удаления файлов старше N дней
Я хочу запустить запланированную задачу Windows, которая удалит все файлы из каталога старше 2 недель.
Причина в том, что это журналы IIS и Tomcat, которые заполняют мой сервер, но я хочу сохранить самые последние журналы на случай, если мне понадобится расследовать проблему.
Кто-нибудь знает простой способ сделать это?
Ваше здоровье
Найджел
Решение
точный синтаксис: FORFILES /p d:\new /d -30 /m * /c "cmd /c del @file"
Другие советы
Самым простым способом был бы запуск файла .bat еженедельно или ежемесячно.
cd \mylog\dir
mkdir archive
del /Q .\archive\*.log
move *.log .\archive
Если вы хотите что-то более сложное, посмотрите на загрузку инструментов cygwin для использования не * 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
@Джейсон:хорошая утилита для ФАЙЛОВ из набора ресурсов
Запланируйте создание пакетного файла для обработки этого.
Эта строка удалит все файлы (*.*) в c:\mydirectory, которые старше 14 дней:
FORFILES -pc:\mydirectory -s -m*.* -d-14 -c"DEL @FILE"
Поместите это в текстовый файл, переименуйте его во что-то вроде "deletefiles.bat" и запланируйте это.
Я не тестировал это, но попробовать должно быть достаточно просто.
Редактировать:Если вы используете это, убедитесь, что понимаете, что происходит - флаг -s указывает ему повторно использовать подкаталоги, а это может быть не то, чего вы хотите.Кроме того, вам может потребоваться указать некоторые флаги и для команды DEL.:)
Редактировать:Понял, что тебе нужно загружайте материалы из Microsoft для того, чтобы FORFILES работали.Мне тоже нравится общепринятое решение, поскольку вам не обязательно иметь что-то особенное.Единственная проблема заключается в том, что это происходит только раз в две недели вместо ежедневного запуска процесса удаления всего, что старше 14 дней.Чего бы это ни стоило.:P
Почему бы вам не написать пакетный файл или скрипт powershell и не запланировать его?
Сценарий для удаления файлов старше указанной даты.
Это довольно тривиально сделать, если у вас есть 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: $!";
}
Строка, которая на самом деле удаляет, закомментирована, поскольку в доме могут быть дети :)