Как мне удалить старые файлы из каталога, сохранив самые последние в Windows [дублировать]

StackOverflow https://stackoverflow.com/questions/50902

  •  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: $!";
}

Строка, которая на самом деле удаляет, закомментирована, поскольку в доме могут быть дети :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top