Wie lassen sich Dateien löschen die älter sind als x Tage? Und das am besten noch ohne zusätzliche Software. Die Lösung liegt wie so oft im Helferlein Nummer 1: Der Windows PowerShell. In diesem Artikel beschreibe ich Dir, wie das funktioniert.

Dateien, die älter sind als x Tage, löschen

Nachdem eines meiner Lieblingstools der letzten Jahre (delage32) durch den Manipulationsschutz einiger Sicherheitsanwendungen angemahnt wurde, habe ich mir die Funktion mit der Windows PowerShell nachgebaut. Herausgekommen ist ein kleines Skript, welches kurz und knapp alle Dateien löscht, deren Alter eine frei definierbares Alter überschritten haben.

Darüberhinaus findet eine Beschränkung auf bestimmte Dateiendungen statt. Das ist dann sinnvoll, wenn im zu überprüfenden Verzeichnis auch noch andere Dateien liegen, die eventuell nicht gelöscht werden dürfen.

Kurze Beschreibung:

  • $Source:  In dieser Variable wird der Quellordner gespeichert, in dem die zu löschenden Dateien liegen.
  • $Days:  Anzahl der Tage, nach denen Dateien gelöscht werden sollen.
  • $ext:  Array, in welchem die zu löschenden Dateiendungen gespeichert sind.

Das Skript löscht rekursiv, also auch alle Dateien in eventuell vorhandenen Unterordnern. Wenn das nicht gewünscht ist, muss in der vorletzten Zeile der Parameter „-recurse“ entfernt werden. Ebenso werden keine Ordner gelöscht, nur Dateien. Alle gelöschten Dateien werden in ein Logfile geschrieben, welches im angegebenen Quellordner gespeichert wird.

Dateien löschen, die älter sind als x Tage (PowerShell Skript)

# Autor: René Albarus - https://www.tech-faq.net
# Date: 2019/04/16
#
# Beschreibung:
# Dieses Skript löscht Dateien, die eine bestimmte Anzahl von Tagen alt sind. Die Dateierweiterungen, das Alter sowie der Ablageort sind definierbar.
# Der Löschvorgang erstreckt sich auf alle Unterordner
# Alle Operationen werden in einem Logfile im Quellordner gespeichert
#
# Hier können Sie den Quellordner, das Alter der Dateien (in Tagen) und die Dateierweiterungen festlegen
$Source = "C:\Temp\"		# Wichtig: muss mit "\" enden
$Days = 90					# Anzahl der Tage, nach denen die Dateien gelöscht werden
$ext = "*.bat","*.cat"		# Array - erweitern mit  ,".xyz" 
$log = "$Source$(get-date -format yymmddHHmmss).txt"
$DateBeforeXDays = (Get-Date).AddDays(-$Days)

# Start Script
start-transcript $log
write-host "--------------------------------------------------------------------------------------"
write-host "Löschen aller Dateien ($ext) im Ordner $Source die älter sind als $Days Tage."
write-host "--------------------------------------------------------------------------------------"
get-childitem $Source* -include $ext -recurse | where {$_.lastwritetime -lt $DateBeforeXDays -and -not $_.psiscontainer} | remove-item -force -verbose
stop-transcript

Die Ausgabe sieht folgendermaßen aus:

Dateien löschen, die älter sind als x Tage
Dateien, die älter sind als x Tage, werden gelöscht.

Das komplette Skript kannst Du auch hier als Datei herunterladen (zip, 9 kb). Es kann auch ideal für die regelmäßige Bereinigung von Ordnerstrukturen dienen, indem es über die Windows Aufgabenplanung ausgeführt wird.

Eine Funktion für das zusätzliche Entfernen von leeren Ordnern findest Du im Artikel Leere Ordner löschen per Powershell.

Wichtig: Die Anwendung des Skriptes geschieht auf eigene Gefahr. Ich übernehme keine Haftung für eventuelle Schäden. 

Ebenfalls interessant:

Support vom Experten