Wie lösche ich unter Windows alte Dateien aus einem Verzeichnis und behalte gleichzeitig die neuesten? [Duplikat]
-
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
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 :)