Aktionen

Windows:Dateien die älter sind als X Tage per Skript / Batch löschen

Aus znilwiki

Variante 1: forfiles

Nein, forfiles kannte ich auch noch nicht, scheint aber seit W2003 / XP dabei zu sein:

Forfiles /P E:\Ordner\ /S /M *.* /D -8 /C "cmd /c del /q @path"

/P E:\Ordner               : Pfad auf dem die Suche gestartet werden soll
/S                         : Bitte mit allen Unterordnern
/M *.*                     : Suchmaske - hier alle Dateien (ausser denen ohne Dateiendung)
/D -8                      : Letztes Änderungsdatum älter als 8 Tage zum heutigen Datum
/C "cmd /c del /q @path"   : Befehl der mit diesen Dateien ausgeführt werden soll (hier löschen)


Important.png
Hinweis:forfiles kann NICHT mit UNC-Pfaden umgehen (\\Server\Freigabe\)




Variante 2: robocopy

Per robocopy schummeln wir - wir verschieben alle älteren Dateien in eine neuen Ordner - den wir dann löschen

mkdir E:\TEMP
robocopy.exe E:\Ordner E:\TEMP /E /MOVE /MINAGE:8 /R:1 /W:1
rmdir E:\TEMP /s /q

mkdir E:\TEMP              : Verzeichnis E:\TEMP erstellen

E:\Ordner                  : Quellordner
E:\TEMP                    : Zielordner
/E                         : inklusive Unterverzeichnisse
/MOVE                      : verschieben statt kopieren
/MINAGE:8                  : Mindestalter, Dateien die jünger als 8 Tage sind werden ignoriert
/R:1                       : Bei Fehler 1x noch mal versuchen
/W:1                       : zwischen Wiederholungen 1 Sekunde warten (bei Fehler)

rmdir E:\TEMP /s /q        : Verzeichnis E:\TEMP inklusive Unterverzeichnissen ohne Nachfrage löschen



---

Variante 3: Nur die letzten X Dateien behalten

  • 12.02.2015: Nach Vorschlag von XYZ das Beispiel um zwei " " um das %%F ergänzt - sonst geht es nicht mit Dateinamen die Leerzeichen enthalten.

Hier einmal (in sauberer Schrift) der Vorschlag von ZAP. Dieser hat den Charme das man damit die Anzahl der Dateien die man behalten will begrenzt. Es geht zwar nach Datum, man behält aber z.B. nur die 5 neuesten Dateien.
Achtung! Das Beispiel funktioniert nur innerhalb einer Batch-Datei! wenn Ihr es von hand testen wollt so macht aus allen %%F ein %F!

M:
cd M:\Testordner
for /f "skip=5 delims=" %%F in ('dir *.* /B /O-D /A-D') do del "%%F"

M:                                   : Auf das Laufwerk M: wechseln
cd M:\Testordner                     : und in den Ordner mit den Dateien wechseln
for /f "skip=5 delims=" %%F in  ( )  : Mache mit jeder Rückgabe (delims={nichts}) aus dem Befehl in den Klammern das was hinter do steht
                                       skip=5 bedeutet das er die ersten 5 Ergebnisse überspringen soll.
'dir *.* /B /O-D /A-D'               : dir mit den Optionen
                               /B    : Nur Dateinamen ausgeben
                               /O-D  : /O bedeutet sortieren, D bedeutet nach Datum. 
                                       Das "-" vor dem D dreht die Reihenfolge um (Älteste zuerst)
                               /A-D  : Nur Dateien mit bestimmten Attributen auflisten, D steht für Verzeichnisse, 
                                       das "-" negiert das ganze so das nur Dateien angezeigt werden
do del "%%F"                           : ... führe den Befehl del aus. %%F wird durch die zurück 
                                       gegebenen Dateinamen vom dir Befehl ersetzt




Variante 4: AutoIt Programm

Ich hatte neulich das Problem das ich eine bestimmte datei löschen wollte wenn diese älter als 8 Tage ist ... und bin mit allen vorstehenden Mitteln gescheitert da es
1. nur eine Datei war
2. diese auf einem UNC-Pfad lag

Lösung: DeleteFilesOlderThan.exe löscht Dateien die älter als X Tage sind
Quellcode steht da auch.



Kommentare

Loading comments...