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.
Das ist dann also der Befehl, mit dem man dann zur Rente alles loswird!