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-Key: 275748

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

Printed on: April 23, 2024 at 11:04 o'clock

Member: netlord
netlord Jun 26, 2015 at 10:58:48 (UTC)
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?
Member: Miyamoto
Miyamoto Jun 26, 2015 updated at 12:13:43 (UTC)
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
Mitglied: 117643
117643 Jun 26, 2015 at 12:18:24 (UTC)
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.
Member: colinardo
Solution colinardo Jun 26, 2015, updated at Jun 29, 2015 at 09:21:18 (UTC)
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
Mitglied: 117643
117643 Jun 29, 2015 at 09:22:16 (UTC)
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
Member: colinardo
colinardo Jun 29, 2015 updated at 10:48:09 (UTC)
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.
Mitglied: 117643
117643 Jun 29, 2015 at 10:46:23 (UTC)
Goto Top
Okay, danke face-smile