Alte Dateien löschen mit forfiles oder robocopy

    Wenn man auf einem vollen Laufwerk Platz schaffen und Dateien löschen möchte, die älter als ein bestimmtes Datum sind, dann empfiehlt sich der Wechsel auf die Kommandozeile. Der Explorer kann zwar in einzelnen Ordnern aufräumen, indem man die darin enthaltenen Dateien nach Datum sortiert und dann entfernt. Für das Lichten von Verzeichnisbäumen eignet sich dieses Verfahren nicht, das können forfiles oder robocopy besser.

    Der Befehl forfiles ist dafür vorgesehen, Dateien nach bestimmte Kriterien auch rekursiv über Unterverzeichnisse auszufiltern und ihre Namen einem beliebigen Kommando zu übergeben. Beim Löschen alter Dateien ist dies natürlich der del-Befehl.

    Dateien mit forfiles nach Datum filtern

    Das wichtigste Filterkriterium für das vorliegende Problem ist offensichtlich das Datum bzw. das Alter von Dateien. Beide Angaben lassen sich an forfiles übergeben, also entweder das Erstellungsdatum oder die Anzahl der Tage, die eine Datei bereits existiert:

    forfiles /m *.doc /s /d -01.11.2011 /c "cmd /c del @path"

    In diesem Beispiel sucht forfiles alle Dateien mit der Endung .doc, und zwar vom aktuellen Verzeichnis abwärts. Möchte man einen anderen Pfad als Ausgangspunkt nehmen, muss man diesen mit dem Schalter /p angeben. Das Filtern nach Alter erfolgt über den Parameter /d, wobei ein Minus vor dem Datum bedeutet, dass eine Datei vor diesem Zeitpunkt angelegt wurde. Alternativ kann man hier die Zahl der Tage angeben, wobei dann ebenfalls ein Minus erforderlich ist, wenn man "älter als" meint. Vor der eigentlichen Ausführung des Löschbefehls ist es eine gute Idee, statt del ein echo einzusetzen, um zu sehen, welche Dateien betroffen wären.

    Variante mit robocopy

    Mit forfiles lässt sich die gestellte Aufgabe schnell und relativ einfach erledigen. Die eher exotische Alternative mit robocopy bräuchte es daher eigentlich nicht, aber sie zeigt, welche Möglichkeiten der Power-Kopierer bietet:

    robocopy . %temp%\old /minage:20100701 /s /mov

    Dieser Aufruf verschiebt alle Dateien unter dem aktuellen Verzeichnis, die vor dem 1.7.2010 geschrieben wurden, in den Ordner %temp%old. Es sollte sichergestellt sein, dass dieser vor der Ausführung von robocopy leer ist. Dort kann man die alten Dateien nochmal inspizieren und dann löschen bzw. auf einem anderen Medium archivieren. Will man nur prüfen, welche Dateien von dem Befehl betroffen wären, kann man robocopy zusätzlich um den Schalter /l ergänzen.

    2 Kommentare

    Bild von Thomas
    Thomas sagt:
    23. September 2013 - 20:29

    In der help für forfiles steht, dass /d das Änderungsdatum prüft und nicht wie beschrieben das Erstelldatum.

    Bild von Roger
    Roger sagt:
    3. September 2014 - 15:16

    Hallo,

    gibt es einen Parameter das Daten älter als X Tage angezeigt/gelöscht werden sollen aber älter als X+20 Tage nicht gelöscht werden sollen?

    Grüße
    Roger