Mit PowerShell Dateien mit bestimmten Teil des Namens finden und löschen
Es ist schön des Öfteren vorgekommen, dass durch ein Fehler den ich verursacht habe oder der durch ein Bug verursacht wurde, mehrere Dateien in einem meiner Ordner erstellt wurden, welche ich danach wieder händisch löschen musste.
Das Problem dabei ist, sobald es viele Dateien sind, geht es in die Zeit. Ich habe schon viele Programme gefunden, wie FindAndReplace oder ähnliche, welche mehr oder weniger das machen, was ich benötige.
Wenn es an sehr viele Dateien geht, sind diese Programme jedoch oft limitiert (Freeware) oder es dauert ewig.
Bei meinem letzten Fall, hat sich jede Datei in einer OneDrive Umgebung kopiert und das Kürzel *Kopie angehängt.
- Originaldatei: dies-ist-ein-Bild.png
- Kopie: dies-ist-ein-Bild-Kopie.png
Es handelte sich um 30.000 Dateien.
Händisch hätte dies unendlich lange gedauert und die Freeware-Tools konnten maximal 1.000 auf einmal löschen.
Wie also vorgehen?
Lösung:
Folgendes PowerShell-Skript Sucht und löscht alle Dateien mit dem Wort Kopie in dem angegebenen Verzeichnis.
Es ist egal ob Kopie Groß- oder Kleingeschrieben ist. Man muss jedoch beachten, dass auch Dateien, welche im Original „Kopie“ heißen, gelöscht werden.
Nach beenden wird ausgegeben, wie viele Dateien gelöscht wurden
# Setzen Sie den Startpfad $pfad = "C:\Ihr\Startverzeichnis" # Zähler für gelöschte Dateien $geloeschteDateien = 0 # Sucht alle Dateien, die "Kopie" (unter Ignorierung von Groß-/Kleinschreibung) im Namen enthalten und löscht diese Get-ChildItem -Path $pfad -Recurse -File | Where-Object { $_.Name.ToLower() -like "*kopie*" } | ForEach-Object { Remove-Item $_.FullName -Force Write-Output ("Gelöscht: " + $_.FullName) $geloeschteDateien++ } Write-Output "Vorgang abgeschlossen." Write-Output ("Insgesamt wurden $geloeschteDateien Dateien gelöscht.")
Viel Erfolg
Hinterlasse einen Kommentar
An der Diskussion beteiligen?Hinterlasse uns deinen Kommentar!