Löschen von Dateien älter als X Tage

Heute hatte ich auf Arbeit mal wieder die Fall, dass ich ein Verzeichnis von alten Dateien aufräumen (bspw. Logfile-Ordner oder Backup-Ordner). Das wäre manuell möglich gewesen, indem ich im Windows-Explorer nach Datum sortiere, die alten Dateien markiere und lösche. Allerdings möchte ich das ja nicht jeden Tag manuell machen, sondern am besten direkt automatisiert. In diesem Fall bietet es sich an, das mit einem einfachem CMD-Skript durchzuführen.

Das folgende Beispiel löscht alle Dateien aus dem Ordner „C:\Logfiles“, die älter als 7 Tage sind:

forfiles /p "C:\Logfiles" /s /m *.* /d -7 /c "cmd /c del @path"

Parameter:

/p „Laufwerk:\Ordner“ — mit /p wird der zu durchsuchende Pfad angegeben.

/s — Das mit /p angegebene Verzeichnis wird rekursiv durchsucht.

/m *.* — Das Verzeichnis wird mit der angegebenen Suchmaske (*.*) durchsucht.

/d -7 — Der Befehl wird auf alle Dateien angewendet, die älter als 7 Tage sind.

/c „cmd /c del @path“ — Auszuführender Befehl für Dateien die den Kriterien entsprechen. Hier werden die Dateien „@path“ mit dem Befehl „del“ gelöscht.


Besonderheit: Netzwerkpfade

Der Befehl forfiles unterstützt keine direkte Verwendung von UNC-Pfaden. Um den Befehl dennoch auf einen UNC-Pfad anzuwenden, muss dieser zuvor als Netzlaufwerk verbunden werden (net use), oder der Befehl wird angepasst zur dynamischen Zuweisung von Laufwerken für UNC-Pfade:

pushd "\\Server\Freigabe" && (forfiles /s /m *.* /d -7 /c "cmd /c del @path") & popd

Erklärung der verwendeten Befehle

Im Gegensatz zum vorherigen Verwendung von forfiles wird der Parameter /p entfernt, da der Befehl pushd das Arbeitsverzeichnis (working directory) für forfiles vorgibt. Die übrigen Parameter bleiben bestehen.

pushd erstellt zur Laufzeit aus dem UNC-Pfad ein Laufwerk (mapping) und verwendet dafür den höchsten verfügbaren Laufwerksbuchstaben (beginnend beim Buchstaben Z:\).

Durch die abschließende Verwendung vom Befehl popd wird das zuvor von pushd erstellte Laufwerk wieder getrennt.

Die 3 Befehle (pushd / forfiles / popd) werden trotz einzeiliger Schreibweise nacheinander ausgeführt, da Sie durch das & miteinander verbunden sind. Bei der Verwendung von && bei pushd wird der darauf folgende Befehl (forfiles) nur dann ausgeführt, wenn der erste Befehl (pushd) erfolgreich beendet wurde.
Somit wird verhindert, dass z.B. bei einem fehlgeschlagenen Mapping durch pushd der Befehl forfiles ausgeführt wird. Das kann im schlimmsten Fall dazu führen, dass Dateien statt im eigentlich gewünschten Verzeichnis im aktuellen Arbeitsverzeichnis des Scripts gelöscht werden.

Weitere Informationen

Die Befehle „forfiles“ / „pushd“ / „popd“ sind über die Kommandozeile in den folgenden Betriebssystemen verfügbar:

  • Windows Server 2003 / 2008 / 2012 / 2016
  • Windows Vista
  • Windows 7
  • Windows 8
  • Windows 10

Weitere Informationen zum Befehl „forfiles“ bzw. „pushd / popd“ finden Sie bei Microsoft.

Permanentlink zu diesem Beitrag: https://ronny-boettcher.de/technik/loeschen-von-dateien-aelter-als-x-tage

Schreibe einen Kommentar

Deine Email-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.