In vielen Ordnern sammeln sich mit der Zeit Dateien an, die längst nicht mehr gebraucht werden. Besonders bei heruntergeladenen Dateien, alten Protokollen oder temporären Sicherungen kann das schnell unübersichtlich werden. Möchtest du solche alten Dateien automatisch löschen, lässt sich das unter Windows 11 mit PowerShell erledigen.
Dabei kannst du genau festlegen, wie alt eine Datei sein muss, bevor sie entfernt wird. Beispielsweise lassen sich alle Dateien löschen, die seit mehr als 30 Tagen nicht mehr verändert wurden. Auch eine Beschränkung auf bestimmte Dateitypen ist möglich.
Wenn du zunächst herausfinden möchtest, welche Dateien und Ordner besonders viel Platz benötigen, kannst du dir anzeigen lassen, was deinen Speicherplatz auf Laufwerk C belegt.
Der Vorteil: Du musst nicht regelmäßig jeden Ordner selbst durchsuchen. Mit der Windows-Aufgabenplanung kann die Bereinigung sogar zu festgelegten Zeiten stattfinden.
Allerdings solltest du bei solchen Befehlen vorsichtig sein. PowerShell löscht Dateien normalerweise direkt, ohne sie vorher in den Papierkorb zu verschieben. Deshalb ist es sinnvoll, zunächst nur nach passenden Dateien zu suchen und den Löschvorgang anschließend zu testen.
Alte Dateien mit PowerShell finden
Bevor du Dateien löschen kannst, musst du festlegen, welche Dateien überhaupt betroffen sein sollen. PowerShell kann dafür verschiedene Eigenschaften auswerten, beispielsweise das Änderungsdatum einer Datei.
Für die folgenden Beispiele verwenden wir einen Ordner namens C:\Testordner. Diesen kannst du im Datei-Explorer selbst erstellen und einige Testdateien hineinkopieren.
Öffne anschließend PowerShell über das Startmenü. Du kannst dazu nach „PowerShell“ suchen und die Anwendung starten. Für einen Ordner, auf den dein Benutzerkonto zugreifen darf, sind normalerweise keine Administratorrechte erforderlich.
Mit folgendem Befehl findest du alle Dateien im Testordner, die seit mehr als 30 Tagen nicht verändert wurden:
Get-ChildItem -LiteralPath "C:\Testordner" -File |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) }
PowerShell durchsucht den angegebenen Ordner und zeigt alle passenden Dateien an. Es wird noch nichts gelöscht.

Der Befehl besteht aus mehreren Teilen:
Get-ChildItemliest den Inhalt des angegebenen Ordners aus.-LiteralPathlegt den Ordnerpfad fest.-Filebeschränkt die Suche auf Dateien und schließt Ordner aus.Where-Objectfiltert die gefundenen Dateien.LastWriteTimeenthält den Zeitpunkt der letzten Änderung.(Get-Date).AddDays(-30)berechnet den Zeitpunkt vor 30 Tagen.-ltbedeutet „kleiner als“ beziehungsweise in diesem Fall „früher als“.
Weitere Informationen zu den verfügbaren Parametern findest du in der offiziellen Microsoft-Dokumentation zu Get-ChildItem.
Entscheidend ist also das Änderungsdatum. Eine Datei, die vor einem Jahr erstellt, aber gestern bearbeitet wurde, gehört nicht zu den Ergebnissen.
Um statt 30 Tagen einen anderen Zeitraum zu verwenden, musst du lediglich die Zahl hinter AddDays ändern. Für 60 Tage verwendest du beispielsweise AddDays(-60).
Dateien vor dem Löschen übersichtlich anzeigen
Bei einer größeren Anzahl gefundener Dateien kann die normale PowerShell-Ausgabe unübersichtlich werden. Deshalb lohnt es sich, nur die wichtigsten Informationen anzeigen zu lassen.
Mit diesem Befehl erhältst du eine Liste mit Dateinamen, Änderungsdatum und Dateigröße:
Get-ChildItem -LiteralPath "C:\Testordner" -File |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Select-Object Name, LastWriteTime, Length
Die Spalte Length zeigt die Dateigröße in Bytes an. So kannst du besser erkennen, welche Dateien möglicherweise besonders viel Speicherplatz belegen.
Möchtest du die vollständigen Dateipfade sehen, kannst du stattdessen FullName verwenden:
Get-ChildItem -LiteralPath "C:\Testordner" -File |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Select-Object FullName, LastWriteTime
Diese Variante ist besonders hilfreich, wenn du später auch Unterordner durchsuchen möchtest. Du siehst dann genau, wo sich die einzelnen Dateien befinden.
Wichtig: Kontrolliere die Ergebnisse sorgfältig. Eine Datei ist nicht automatisch überflüssig, nur weil sie seit längerer Zeit nicht verändert wurde.
Alte Dateien automatisch löschen mit PowerShell
Nachdem du die gefundenen Dateien überprüft hast, kannst du sie mit PowerShell entfernen. Dafür wird der Befehl Remove-Item verwendet.
Bevor tatsächlich etwas gelöscht wird, solltest du allerdings einen Testlauf durchführen. PowerShell bietet dafür den Parameter -WhatIf.
Der vollständige Befehl lautet:
Get-ChildItem -LiteralPath "C:\Testordner" -File |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Remove-Item -WhatIf
PowerShell zeigt nun an, welche Dateien gelöscht würden. Tatsächlich verändert der Befehl aber nichts.
Microsoft beschreibt den Parameter -WhatIf in der offiziellen Dokumentation zu Remove-Item. Er zeigt die geplante Aktion an, ohne sie auszuführen.

Das ist besonders praktisch, wenn du den Ordnerpfad oder die Filterbedingungen gerade erst eingerichtet hast.
Kontrolliere die angezeigten Dateipfade. Wenn ausschließlich die gewünschten Dateien betroffen sind, kannst du den Parameter -WhatIf entfernen.
Der eigentliche Löschbefehl sieht dann so aus:
Get-ChildItem -LiteralPath "C:\Testordner" -File |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Remove-Item
Jetzt werden die passenden Dateien tatsächlich gelöscht.
Achtung: Die so entfernten Dateien landen normalerweise nicht im Windows-Papierkorb. Eine Wiederherstellung ist deshalb nicht ohne Weiteres möglich. Verwende den Befehl zunächst ausschließlich in einem Testordner und sichere wichtige Daten vorher.
Auf Bestätigungsabfragen solltest du dich als Schutz nicht verlassen. Je nach Befehl und Umgebung kann die Löschung ohne weitere Rückfrage erfolgen.
Nur bestimmte Dateitypen automatisch löschen
Nicht immer sollen sämtliche alten Dateien aus einem Ordner verschwinden. Häufig ist es sinnvoller, die Bereinigung auf bestimmte Dateitypen zu beschränken.
Ein typisches Beispiel sind Protokolldateien mit der Endung .log. Solche Dateien werden von verschiedenen Programmen angelegt und können sich über längere Zeit ansammeln.
Wenn du ausschließlich LOG-Dateien entfernen möchtest, die älter als 30 Tage sind, verwendest du folgenden Befehl:
Get-ChildItem -LiteralPath "C:\Testordner" -Filter "*.log" -File |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Remove-Item -WhatIf
Durch -Filter "*.log" berücksichtigt PowerShell nur Dateien mit der entsprechenden Endung.
Du kannst den Filter auch für andere Dateitypen verwenden:
| Filter | Berücksichtigte Dateien |
|---|---|
*.log | Protokolldateien |
*.tmp | Dateien mit der Endung TMP |
*.bak | Sicherungsdateien mit der Endung BAK |
*.zip | ZIP-Archive |
*.txt | Textdateien |
Die Dateiendung allein sagt allerdings nichts darüber aus, ob eine Datei noch benötigt wird. Gerade ZIP-Archive oder BAK-Dateien können wichtige Sicherungen enthalten.
Deshalb empfiehlt es sich, solche Filter nur in Ordnern einzusetzen, deren Inhalt du kennst.
Wenn der Testlauf die gewünschten Ergebnisse zeigt, kannst du auch hier -WhatIf entfernen.
Unterordner bei der Bereinigung berücksichtigen
Standardmäßig durchsucht Get-ChildItem nur den angegebenen Ordner. Dateien in darunterliegenden Verzeichnissen werden nicht berücksichtigt.
Mit dem Parameter -Recurse kannst du die Suche auf sämtliche Unterordner erweitern.
Ein Beispiel:
Get-ChildItem -LiteralPath "C:\Testordner" -File -Recurse |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
Remove-Item -WhatIf
PowerShell durchsucht jetzt den Testordner einschließlich seiner Unterordner. Alle Dateien, deren Änderungsdatum mehr als 30 Tage zurückliegt, werden für die Löschung vorgemerkt.
Das kann beispielsweise sinnvoll sein, wenn ein Programm seine Protokolle in mehreren Unterverzeichnissen ablegt.
Die Ordner selbst werden durch diesen Befehl nicht gelöscht. Es geht ausschließlich um Dateien.
Bei -Recurse ist besondere Vorsicht angebracht. Je nach Ordnerstruktur können sehr viele Dateien betroffen sein. Nutze deshalb unbedingt den Testlauf und kontrolliere die Ausgabe, bevor du eine Löschung ausführst.
Verwende solche Befehle nicht pauschal für das gesamte Laufwerk C:\, den Windows-Ordner oder andere Systemverzeichnisse.
PowerShell-Bereinigung als Skript speichern
Wenn du regelmäßig dieselben Ordner bereinigen möchtest, musst du den PowerShell-Befehl nicht jedes Mal neu eingeben.
Stattdessen kannst du ihn als Skript speichern. Eine solche Datei besitzt die Endung .ps1 und enthält PowerShell-Anweisungen, die sich später erneut ausführen lassen.
Erstelle zunächst einen Ordner C:\Scripts. Öffne anschließend den Windows-Editor und füge folgenden Inhalt ein:
$Ordner = "C:\Testordner"
$Tage = 30
$Grenzdatum = (Get-Date).AddDays(-$Tage)
Get-ChildItem -LiteralPath $Ordner -File |
Where-Object { $_.LastWriteTime -lt $Grenzdatum } |
Remove-Item -WhatIf
Speichere die Datei unter dem Namen AlteDateienLoeschen.ps1 im Ordner C:\Scripts.
Achte beim Speichern darauf, als Dateityp „Alle Dateien“ auszuwählen. Andernfalls könnte der Editor versehentlich eine Datei mit der Endung .ps1.txt erstellen.
Das Skript verwendet drei Variablen:
$Ordnerenthält das Verzeichnis, das bereinigt werden soll.$Tagebestimmt, wie alt die Dateien mindestens sein müssen.$Grenzdatumenthält den berechneten Zeitpunkt, mit dem die Änderungsdaten verglichen werden.
Der Vorteil dieser Lösung liegt in der einfachen Anpassung. Möchtest du Dateien beispielsweise erst nach 90 Tagen löschen, änderst du lediglich $Tage = 30 in $Tage = 90.
Zum Testen kannst du das Skript in PowerShell mit folgendem Befehl starten:
& "C:\Scripts\AlteDateienLoeschen.ps1"
Falls Windows die Ausführung aufgrund der PowerShell-Ausführungsrichtlinie verhindert, kannst du für die aktuelle PowerShell-Sitzung eine begrenzte Freigabe setzen:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
Diese Einstellung gilt nur für den aktuellen Prozess und ändert nicht dauerhaft die Ausführungsrichtlinie des Computers. Eine übergeordnete Gruppenrichtlinie kann sie weiterhin einschränken. Verwende sie ausschließlich für Skripte, deren Inhalt du kennst und überprüft hast.
Solange -WhatIf enthalten ist, führt das Skript nur einen Testlauf durch. Für die spätere automatische Bereinigung musst du den Parameter entfernen, nachdem du die Dateiauswahl kontrolliert hast.
Alte Dateien über die Windows-Aufgabenplanung automatisch löschen
Mit der Windows-Aufgabenplanung lässt sich das gespeicherte PowerShell-Skript regelmäßig ausführen. Damit ist es beispielsweise möglich, einmal täglich oder wöchentlich alte Dateien zu entfernen.
Wenn du lediglich temporäre Windows-Dateien automatisch entfernen möchtest, ist die integrierte Speicheroptimierung von Windows 11 häufig die einfachere Lösung.
Die Einrichtung funktioniert unter Windows 11 ohne zusätzliche Software.
Neue Aufgabe erstellen
- Drücke
Windows + R, gibtaskschd.mscein und bestätige mit Enter. - Klicke rechts auf „Aufgabe erstellen“.
- Vergib im Register „Allgemein“ einen Namen wie „Alte Dateien bereinigen“.
- Wähle unter den Sicherheitsoptionen zunächst „Nur ausführen, wenn der Benutzer angemeldet ist“.
- Öffne das Register „Trigger“ und klicke auf „Neu“.
- Lege fest, wann die Bereinigung stattfinden soll, beispielsweise täglich um 18 Uhr.
- Bestätige die Einstellungen mit „OK“.
Damit hast du festgelegt, wann Windows die Aufgabe starten soll.
PowerShell-Skript als Aktion hinterlegen
Wechsle anschließend zum Register „Aktionen“ und klicke auf „Neu“.
Wähle als Aktion „Programm starten“ und trage folgende Werte ein:
| Feld | Eingabe |
|---|---|
| Programm/Skript | powershell.exe |
| Argumente hinzufügen | -NoProfile -NonInteractive -File "C:\Scripts\AlteDateienLoeschen.ps1" |
| Starten in | C:\Scripts |

Bestätige die Eingaben und speichere die Aufgabe.
Der Parameter -NoProfile sorgt dafür, dass PowerShell ohne benutzerspezifische Profilskripte startet. -NonInteractive verhindert interaktive Eingabeaufforderungen. Mit -File gibst du die auszuführende Skriptdatei an.
Falls dein Skript durch eine Ausführungsrichtlinie blockiert wird, solltest du die Ursache prüfen und die Ausführung gezielt ermöglichen. Ein dauerhaftes Abschalten der PowerShell-Sicherheitsmechanismen ist dafür nicht erforderlich.
Automatische Bereinigung testen
Bevor du die Aufgabe dauerhaft verwendest, solltest du ihre Funktion kontrollieren.
Klicke dazu in der Aufgabenplanung mit der rechten Maustaste auf die neue Aufgabe und wähle „Ausführen“.
Kontrolliere anschließend den Aufgabenstatus und das Feld „Letztes Ausführungsergebnis“. Beachte dabei, dass ein erfolgreich gestarteter PowerShell-Prozess noch nicht garantiert, dass sämtliche gewünschten Dateien gelöscht wurden.
Für den ersten Test sollte im Skript weiterhin -WhatIf stehen. Da die Ausgabe einer geplanten Aufgabe normalerweise nicht sichtbar ist, lässt sich das Ergebnis besser durch einen zusätzlichen manuellen Skriptaufruf überprüfen.
Wenn alles korrekt eingerichtet ist, kannst du -WhatIf aus dem gespeicherten Skript entfernen.
Prüfe die Aufgabe anschließend mit eigens angelegten Testdateien. Erst danach solltest du den Ordner auf dein tatsächliches Bereinigungsverzeichnis ändern.
Ein weiterer Punkt: Die Aufgabe kann nur ausgeführt werden, wenn die eingestellten Bedingungen erfüllt sind. Ist der Computer zum geplanten Zeitpunkt ausgeschaltet, findet die Bereinigung nicht automatisch zu dieser Uhrzeit statt. In den Einstellungen der Aufgabe kannst du festlegen, dass ein verpasster Start möglichst bald nachgeholt wird.
Gelöschte Dateien und Bereinigung protokollieren
Bei einer automatischen Bereinigung ist es sinnvoll, nachvollziehen zu können, welche Dateien entfernt wurden. Das erleichtert die Fehlersuche und hilft dabei, unerwartete Löschvorgänge zu erkennen.
Dafür kannst du dein Skript um eine einfache Protokollierung erweitern.
Das folgende Beispiel schreibt erfolgreich gelöschte Dateien in eine Textdatei:
$Ordner = "C:\Testordner"
$Tage = 30
$Grenzdatum = (Get-Date).AddDays(-$Tage)
$Protokoll = "C:\Scripts\Bereinigung.log"
Get-ChildItem -LiteralPath $Ordner -File |
Where-Object { $_.LastWriteTime -lt $Grenzdatum } |
ForEach-Object {
$Dateipfad = $_.FullName
try {
Remove-Item -LiteralPath $Dateipfad -ErrorAction Stop
"$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - Geloescht: $Dateipfad" |
Out-File -FilePath $Protokoll -Append -Encoding UTF8
}
catch {
"$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - Fehler: $Dateipfad - $($_.Exception.Message)" |
Out-File -FilePath $Protokoll -Append -Encoding UTF8
}
}
Bei jedem erfolgreichen Löschvorgang wird der Dateipfad zusammen mit dem aktuellen Zeitpunkt in die Datei Bereinigung.log geschrieben. Tritt beim Entfernen ein Fehler auf, wird stattdessen eine Fehlermeldung protokolliert.
Der Ordner C:\Scripts muss dafür bereits existieren. Außerdem benötigt das ausführende Benutzerkonto Schreibrechte für die Protokolldatei.
Achtung: Dieses Beispiel führt echte Löschvorgänge aus. Teste die Protokollierung zunächst ausschließlich mit entbehrlichen Dateien in einem separaten Testordner.
Die Protokolldatei solltest du außerhalb des zu bereinigenden Verzeichnisses speichern. So verhinderst du, dass sie später selbst von der Bereinigung erfasst wird.
Für private Anwendungsfälle reicht eine solche einfache Protokollierung häufig aus. Wenn sehr viele Dateien verarbeitet werden, kann es sinnvoll sein, das Protokoll regelmäßig zu archivieren oder seine Größe zu begrenzen.
Wenn PowerShell alte Dateien nicht löscht
Manchmal werden trotz eines korrekt aufgebauten Befehls keine Dateien entfernt. Die Ursache liegt häufig bei fehlenden Berechtigungen oder einer nicht passenden Filterbedingung.
Die folgenden Punkte solltest du überprüfen:
| Problem | Mögliche Ursache und Lösung |
|---|---|
| Keine Dateien gefunden | Änderungsdatum und Zeitraum kontrollieren |
| Zugriff verweigert | Berechtigungen des Benutzerkontos prüfen |
| Datei kann nicht gelöscht werden | Möglicherweise wird sie von einem Programm verwendet |
| Unterordner fehlen | Prüfen, ob -Recurse verwendet wird |
| Skript startet nicht | Ausführungsrichtlinie und Skriptpfad kontrollieren |
| Geplante Aufgabe funktioniert nicht | Benutzerkonto, Trigger, Bedingungen und Aufgabenverlauf prüfen |
Besonders häufig wird das Änderungsdatum falsch eingeschätzt. Eine Datei kann bereits mehrere Jahre auf dem Computer liegen und trotzdem ein aktuelles Änderungsdatum besitzen.
Auch die Berechtigungen können Probleme verursachen. PowerShell kann normalerweise nur Dateien löschen, für die das ausführende Benutzerkonto die erforderlichen Rechte besitzt.
Es ist keine gute Idee, solche Probleme pauschal durch eine PowerShell-Sitzung mit Administratorrechten zu umgehen. Prüfe zuerst, ob der ausgewählte Ordner überhaupt für eine automatische Bereinigung geeignet ist.
Bei einer geplanten Aufgabe solltest du zusätzlich beachten, unter welchem Benutzerkonto sie ausgeführt wird. Dieses Konto benötigt sowohl Zugriff auf das Skript als auch die passenden Berechtigungen für den Zielordner.
Fazit: Alte Dateien gezielt und sicher entfernen
Mit PowerShell lassen sich alte Dateien sehr flexibel bereinigen. Besonders praktisch ist die Möglichkeit, Dateien anhand ihres Änderungsdatums auszuwählen und die Suche auf bestimmte Dateitypen oder Ordner zu beschränken.
Für gelegentliche Aufräumarbeiten reicht ein einzelner PowerShell-Befehl vollkommen aus. Eine automatische Ausführung über die Windows-Aufgabenplanung lohnt sich dagegen vor allem bei Ordnern, in denen regelmäßig neue Protokolle oder temporäre Dateien entstehen.
Ich empfehle, zunächst mit einem separaten Testordner zu arbeiten und die Ergebnisse mit -WhatIf zu kontrollieren. Erst wenn die Auswahl zuverlässig funktioniert, sollte die tatsächliche Löschung aktiviert werden.
Für persönliche Dokumente, Fotos oder wichtige Sicherungen ist eine pauschale Bereinigung nach Dateialter dagegen keine gute Lösung. Dort sollte immer bewusst entschieden werden, welche Dateien noch benötigt werden.
Das gilt besonders für heruntergeladene Dateien. Wie du Downloads unter Windows 11 gezielt löschen kannst, ohne wichtige Dokumente zu verlieren, erkläre ich in einer separaten Anleitung.
Gefällt dir Dirks-Computerecke? Mit einem Klick kannst du diese Seite bei Google als bevorzugte Quelle festlegen – dann bekommst du meine Artikel in der Google-Suche und in den KI-Übersichten bevorzugt angezeigt.
