tegwert
Goto Top

Alle Dateien in Verzeichnis und Unterverzeichnissen löschen, mit Ausnahme aller.txt-Dateien

Hallo zusammen!

Ich habe zum löschen aller Dateien in bestimmten Verzeichnissen und dessen Unterverzeichnissen folgende Batchzeile erstellt:
FOR %%a IN (Z:\test1 z:\test2) DO FOR /f "delims=" %%i IN ('DIR /s /b /a %%a\* ^| FINDSTR /vec:.txt') DO DEL /q "%%i"  

Dabei muss sicher gestellt sein, das alle Dateien mit der Endung .txt von der Löschung ausgeschlossen werden. Bei meinen Testversuchen werden alle Dateien korrekt gelöscht, aber der Ausschluss für die .txt-Dateien wird nur für die oberen Ordner beachtet, die .txt-Dateien in den weiteren Unterverzeichnissen dieser Ordner werden trotzdem gelöscht.

Was habe ich hier übersehen?

MFG
tegwert

Content-ID: 339805

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

Ausgedruckt am: 23.11.2024 um 02:11 Uhr

133417
133417 04.06.2017 aktualisiert um 18:22:44 Uhr
Goto Top
FOR %%a IN (Z:\test1 z:\test2) DO FOR /f "delims=" %%i IN ('DIR /s /b /a-d "%%a" ^| FINDSTR /vie "\.txt"') DO DEL "%%i"  
Oder besser gleich Powershell
gci "Z:\test1\*","Z:\test2\*" -File -Recurse -Exclude *.txt | del -Force  

Suchfunktion wieder kapott?!

Gruß
tegwert
tegwert 04.06.2017 aktualisiert um 18:34:35 Uhr
Goto Top
Hallo BibersBaum!

Vielen Dank! Jetzt funktioniert es. Aber eine kurze Frage noch:

Wenn ich in der Batchzeile zusätzlich zu den .txt-Dateien noch .ini-Dateien ausschließen will. Wie kann man hier zwei Dateiendungen in den FINDSTR einbinden?

Mein Versuch für zwei Dateiendungen sieht so aus:
FOR %%a IN (Z:\test1 z:\test2) DO FOR /f "delims=" %%i IN ('DIR /s /b /a-d "%%a" ^|FINDSTR /vie "\.[txt|ini]"') DO DEL "%%i"  

Doch jetzt wird keine der Dateiendungen ausgeschlossen.

Gruß
tergert
133417
133417 04.06.2017 aktualisiert um 18:54:53 Uhr
Goto Top
Findstr unterstützt zwar Regex, aber nur rudimentär, deswegen gibt es dort den Oder Operator (|) nicht, du kannst aber mit einer Leerstelle das gleiche erreichen.
FOR %%a IN (Z:\test1 z:\test2) DO FOR /f "delims=" %%i IN ('DIR /s /b /a-d "%%a" ^|FINDSTR /vie "\.txt \.ini"') DO DEL "%%i"  
ein findstr /? sagt dir warum.

Leerzeichen weisen auf mehrere getrennte Zeichenfolgen hin, außer es wurde /C
als Option angegeben. Zum Beispiel sucht 'FINDSTR "Windows NT" BR.TXT' nach
"Windows" oder "NT" in der Datei BR.TXT.  'FINDSTR /C:"Windows NT" BR.TXT'
hingegen sucht nach "Windows NT" in der Datei BR.TXT.
tegwert
tegwert 04.06.2017 um 19:05:29 Uhr
Goto Top
Hallo BibersBaum!

Vielen Dank! Das hilft mir auf jeden Fall weiter. Und die Hilfe zu FINDSTR werde ich mir auch mal genauer ansehen.

Gruß
tergert
133417
133417 04.06.2017 um 19:06:43 Uhr
Goto Top
You're welcome.

Schönes Pfingswochenende.