Wie lösche ich unter Windows alte Dateien aus einem Verzeichnis und behalte gleichzeitig die neuesten? [Duplikat]

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

  •  09-06-2019
  •  | 
  •  

Frage

Mögliches Duplikat:
Batch-Datei zum Löschen von Dateien, die älter als N Tage sind

Ich möchte eine geplante Windows-Aufgabe ausführen, die alle Dateien aus einem Verzeichnis löscht, die älter als 2 Wochen sind.

Der Grund dafür ist, dass dies IIS- und Tomcat-Protokolle sind, die meinen Server füllen, ich aber die neuesten Protokolle behalten möchte, falls ich ein Problem untersuchen muss.

Kennt jemand eine einfache Möglichkeit, dies zu tun?

Prost

Nige

War es hilfreich?

Lösung

genaue Syntax: FORFILES /p d:\new /d -30 /m * /c "cmd /c del @file"

Andere Tipps

Der einfachste Weg wäre eine .bat-Ausführungsdatei, die wöchentlich oder monatlich ausgeführt wird.

cd \mylog\dir
mkdir archive
del /Q .\archive\*.log
move *.log .\archive

Wenn Sie etwas Komplexeres wünschen, laden Sie die Cygwin-Tools herunter, um un*x-ähnliche Befehle zu verwenden, oder werfen Sie einen Blick auf Powershell.

Mit VBScript, angepasst von ScriptingAntworten

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

Sie können dieses Skript mit CScript ausführen

@Jason:nettes Dienstprogramm, FORFILES aus dem Resource Kit

Planen Sie eine Batchdatei, um dies zu erledigen.

Diese Zeile löscht alle Dateien (*.*) in c:\meinVerzeichnis, die älter als 14 Tage sind:

FORFILES -pc:\mydirectory -s -m*.* -d-14 -c"DEL @FILE"

Fügen Sie das in eine Textdatei ein, benennen Sie es in etwas wie „deletefiles.bat“ um und planen Sie es.

Ich habe das nicht getestet, aber es sollte einfach genug sein, es auszuprobieren.


BEARBEITEN:Wenn Sie dies verwenden, stellen Sie sicher, dass Sie verstehen, was passiert – das Flag -s weist es an, die Unterverzeichnisse zu rekursieren, und das ist möglicherweise nicht das, was Sie wollen.Außerdem müssen Sie möglicherweise auch einige Flags für den DEL-Befehl angeben.:) :)


BEARBEITEN:Habe erkannt, dass du es tun musst Laden Sie Sachen von Microsoft herunter damit FORFILES funktioniert.Mir gefällt auch die akzeptierte Lösung, da man nichts Besonderes haben muss.Das einzige Problem besteht darin, dass dies nur alle zwei Wochen geschieht, anstatt täglich einen Prozess auszuführen, um alle Dinge zu entfernen, die älter als 14 Tage sind.Für das, was das wert ist.:P

Warum schreiben Sie nicht eine Batchdatei oder ein Powershell-Skript und planen es?

Skript zum Löschen von Dateien, die älter als ein bestimmtes Datum sind.

Dies ist ziemlich trivial, wenn Sie Perl (oder ähnliches) auf dem Server installiert haben:

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

Die Zeile, die tatsächlich löscht, ist auskommentiert, da möglicherweise Kinder im Haus sind :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top