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

Possible Duplicate:
Batch file to delete files older than N days

Я хочу запустить запланированную задачу Windows, которая удаляет все файлы из каталога старше 2 недель.

Причина в том, что это журналы IIS и Tomcat, которые заполняют мой сервер, но я хочу сохранить самые последние журналы на случай, если мне понадобится исследовать проблему.

Кто-нибудь знает простой способ сделать это?

Ваше здоровье

Ниг

Новый метод, основанный на файле .BAT, который использует только внутренние команды CMD.EXE, был размещен здесь: stackoverflow.com/questions/9746778/…

Aacini 17.03.2012 08:21
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
1
21 810
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Почему бы вам не написать командный файл или сценарий 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>. Есть идеи, почему или что может вызвать это?

Jona 11.08.2010 14:26

Вне моей головы, поскольку у меня нет времени смотреть на данный момент, я полагаю, что это как-то связано с запуском сценария от имени администратора. Вам, вероятно, придется куда-то добавить команду runas. Посмотрите синтаксис, но он, вероятно, войдет в последнюю процитированную часть, например "runas <runas options> DEL @FILE". Сообщите мне, что вы узнали, я не запускал этот сценарий, так как я надеялся на Windows 7 прошлым летом, вероятно, поэтому я не столкнулся с этим.

Jason Bunting 11.08.2010 23:17

Да, вы, вероятно, можете просто запустить командный файл от имени администратора и не показывать его в каждой строке "DEL @FILE" ... Мне действительно нужно больше сна!

Jason Bunting 11.08.2010 23:18

Это довольно просто сделать, если на сервере установлен 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"

Другие вопросы по теме