Dateien löschen die älter sind als x Tage

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.

DQo8cD48YnIvPg0KPHNjcmlwdCBhc3luYyBzcmM9Imh0dHBzOi8vcGFnZWFkMi5nb29nbGVzeW5kaWNhdGlvbi5jb20vcGFnZWFkL2pzL2Fkc2J5Z29vZ2xlLmpzIj48L3NjcmlwdD4NCjwhLS0gVEVDSEZBUSAtIEltIEFydGlrZWwgLS0+DQo8aW5zIGNsYXNzPSJhZHNieWdvb2dsZSINCiAgICAgc3R5bGU9ImRpc3BsYXk6YmxvY2siDQogICAgIGRhdGEtYWQtY2xpZW50PSJjYS1wdWItOTI5NDg1MzEyMDc1NDI3OSINCiAgICAgZGF0YS1hZC1zbG90PSI1MDc3NjQ3MTY5Ig0KICAgICBkYXRhLWFkLWZvcm1hdD0iYXV0byINCiAgICAgZGF0YS1mdWxsLXdpZHRoLXJlc3BvbnNpdmU9InRydWUiPjwvaW5zPg0KPHNjcmlwdD4NCiAgICAgKGFkc2J5Z29vZ2xlID0gd2luZG93LmFkc2J5Z29vZ2xlIHx8IFtdKS5wdXNoKHt9KTsNCjwvc2NyaXB0Pjxici8+PC9wPg0K

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.

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

Ebenfalls interessant:

Dieser Artikel ist wie alle anderen auf dieser Seite kostenlos für Dich und ich hoffe, ich konnte Dir weiterhelfen. Wer möchte, kann diesem Blog eine kleine Aufmerksamkeit in Form einer kleinen Spende (PayPal) oder über die Amazon Wunschliste zukommen lassen. Bitcoins gerne hier hin: 17zAdJSDYkukxeWFfSu5qjnmMtKamWzRuD.

6 Gedanken zu „Dateien löschen die älter sind als x Tage“

    • Hallo Peter,

      es wäre schön gewesen, wenn Du den Fehler etwas genauer beschrieben hättest. Ich habe aber gerade bei einem Test festgestellt, dass es Probleme bei Dateien mit Sonderzeichen gab (z.B. eckige Klammern). Das habe ich jetzt verbessert und erfolgreich getestet. Das Skript im Beitrag habe ich aktualisiert.

      Viele Grüße, René

      Antworten
  1. Hi René,

    dein Skript läuft perfekt. Vielen Dank dafür.
    Ich hatte ebenfalls das Problem mit den Sonderzeichen. Kannst du kurz erläutern, was die Änderung war?

    VG
    Flo

    Antworten
    • Hallo Flo,
      das Ende der vorletzten Zeile sah so aus: |% {remove-item $_.fullname -force -verbose} – damit gab es Probleme bei den Sonderzeichen

      Antworten
  2. Hallo René,

    vielen Dank fürs Zur-Verfügung stellen.

    Ich glaub ich bin zu doof. Bei mir wird die Dateiausgabe (soweit ich sehen kann) überhaupt nicht eingeschränkt.

    $Source = „E:\Datenbanksicherung\“
    $Days = 90
    $Ext = „*.7z“
    $DateBeforeXDays = (Get-Date).AddDays(-$Days)
    Get-ChildItem -Path $Source* -Include $Ext -Recurse | where {$_LastWriteTime -lt $DateBeforeXDays -and -not $_PsIsContainer}

    Hat mich am Freitag direkt mal alle (lokalen) Sicherungskopien gekostet ;X (Aber dafür hab ich ja Backups).

    Siehst du meinen Fehler?

    Danke!

    Antworten

Schreibe einen Kommentar