117643
Goto Top

Dateien per Powershell bzw Batch löschen

Hallo,
Es gibt einen Ordner C:\Freigaben mit diversen Unterordnern(welche auch wieder Unterordner enthalten). Aus diesen Ordnern sollen alle *.txt Dateien gelöscht werden. Mit Ausnahme von *.txt Dateien im Unterordner C:\Freigaben\Ordner1 und C:\Freigaben\Ordner3.

Wer ist mir behilflich und sagt mir wie ein entsprechender Befehl in Batch oder Powershell aussehen muss?

Danke vorab und ein schönes Wochenende euch allen face-smile

Content-ID: 275748

Url: https://administrator.de/contentid/275748

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

netlord
netlord 26.06.2015 um 12:58:48 Uhr
Goto Top
Hallo Michael

ist die genaue Ordnerstruktur bekannt?

Falls ja kannst in der bekannten Struktur rekursiv löschen.
Falls nein sehe ich zwei Ansätze.

1.) die nicht zu löschenden Dateien mit einem Attribut (oder Attributkombination) versehen und die dann nicht löschen.
2.) die nicht zu löschenden Dateien zuerst an eine andere, sichere Stelle kopieren/verschieben und dann zurückbewegen.


Was sagt dir eher zu?
Miyamoto
Miyamoto 26.06.2015 aktualisiert um 14:13:43 Uhr
Goto Top
Moin,

mit der PowerShell kannst du so was machen
get-childitem * -include *.txt -exclude *Hallo* -recurse | remove-item
Das Skript macht folgendes:
In dem Verzeichnis in dem du dich befindest und in allen Verzeichnissen da drunter, werden alle txt Dateien gelöscht außer die die ein "Hallo" im Namen haben.

ps: ungetestet

Gruß Miyamoto
117643
117643 26.06.2015 um 14:18:24 Uhr
Goto Top
Das geht schon in die richtige richtung. Werden mit diesem Befehl auch Unterordner mit dem Begriff Hallo augeschlossen? Was brauche ich nämlich face-smile

Der Ordner C:\freigaben hat ca 150 ordner mit unterordern. Von diesen 150 sollen 5 von der Löschaktion ausgenommen werden.
Es handelt sich um User-Vereichnisse die wir von Datenmüll befreien möchten.
colinardo
Lösung colinardo 26.06.2015, aktualisiert am 29.06.2015 um 11:21:18 Uhr
Goto Top
Hallo Michael,
kannst du so machen:
gci 'c:\Freigaben' -Filter *.txt -Recurse  | ?{$_.DirectoryName -ne 'C:\Freigaben\Ordner1' -or $_.DirectoryName -ne 'C:\Freigaben\Ordner3'} | remove-item -Force  
Hierbei könntest du auch mit Wildcards (-like) oder Regex(-notmatch) arbeiten, wie man es halt braucht...

Für eine größere Anzahl Ordner kannst du diese auch in ein Array schreiben (ist übersichtlicher):
gci 'c:\Freigaben' -Filter *.txt -Recurse  | ?{$_.DirectoryName -notin @('C:\Freigaben\Ordner1','C:\Freigaben\Ordner3','C:\Freigaben\Ordner5')} | remove-item -Force  
Grüße Uwe
117643
117643 29.06.2015 um 11:22:16 Uhr
Goto Top
Hallo face-smile
Die erste Variante klappt leider nicht, Er löscht trotzdem alles. Variante 2 klappt sehr gut, Vorraussetzung ist eine aktuelle Powershell-Version face-smile
colinardo
colinardo 29.06.2015 aktualisiert um 12:48:09 Uhr
Goto Top
Zitat von @117643:
Die erste Variante klappt leider nicht, Er löscht trotzdem alles.
Läuft einwandfrei wenn man es denn richtig anwendet face-wink !
Natürlich muss man hier unterscheiden, möchte ich Textdateien nur in den explizit angegebenen Verzeichnnissen nicht löschen oder auch Unterverzeichnisse dieses Ordners mit einbeziehen. Im letzteren Fall arbeitet man nicht mit dem Operator -ne sondern -notlike und setzt am Ende jedes angegebenen Verzeichnisses ein Sternchen, wie ich ja oben schon erwähnt habe.
117643
117643 29.06.2015 um 12:46:23 Uhr
Goto Top
Okay, danke face-smile