45455

NOT in FOR-Schleife?

Verzeichnisse, die NICHT einer Liste entsprechen, sollen gelöscht werden

Hallo an die Batch-Bastler,

nach etwas Suche hab ich kapiert, wie ich Verzeichnisse löschen kann, die vorher in einer Text-Datei gespeichert wurden:

For /f "tokens=1" %%i IN (folders.txt) DO (
rmdir %%i /DELETE
)

Jetzt hätt ichs aber gern umgekehrt, die Verzeichnisse in der Datei sollen stehen bleiben, alles andere gelöscht werden.
Aber ein NOT geht ja hier nicht. (Wär ja auch zu einfach für einen Progg-DAU wie mich)

Das ganze passiert nur in einem Verzeichnis mit mehreren Unterverzeichnis, von denen halt die vorgegebenen stehen bleiben sollen.

Ich hab mich auch schon an FOR /R probiert, da man da ja den Pfad angeben kann, innerhalb dessen abgearbeitet wird, komme da aber auch nicht recht weiter.

Könnte da jemand "Starthilfe" geben?

Gruß
kai
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 119159

Url: https://administrator.de/forum/not-in-for-schleife-119159.html

Ausgedruckt am: 24.05.2025 um 09:05 Uhr

bastla
bastla 26.06.2009 um 15:04:39 Uhr
Goto Top
Hallo blue0711!

Wenn in der Datei "D:\DieNicht.txt" die vollständigen Pfade der nicht zu löschenden Ordner des Ausgangsordners "D:\Der Ordner" stehen, dann etwa so:
for /d %%i in ("D:\Der Ordner\*.*") do findstr /i "%%~fi" "D:\DieNicht.txt">nul || echo rd /s /q "%%i"
Wegen des "echo" vor dem "rd" werden die Löschbefehle (zum Testen) nur angezeigt, aber noch nicht ausgeführt.

Grüße
bastla

[Edit] @77559: Wusste ich doch, dass ich "findstr /G" Dir überlassen sollte ... face-wink [/Edit]
77559
77559 26.06.2009 um 15:05:28 Uhr
Goto Top
Zitat von @45455:
Jetzt hätt ichs aber gern umgekehrt, die Verzeichnisse in der Datei sollen stehen bleiben, alles andere gelöscht werden. Aber ein NOT geht ja hier nicht. (Wär ja auch zu einfach für einen Progg-DAU wie mich)

Das ganze passiert nur in einem Verzeichnis mit mehreren Unterverzeichnis, von denen halt die vorgegebenen stehen bleiben sollen.

Hallo Kai,
versuch mal dies (ungetestet):
Pushd C:\Anfangsverzeichnis
For /f "delims=" %%i IN (' Dir  /B /S /AD ^| findstr /i /V /G:folders.txt ') DO (  
Echo rmdir "%%i" 2>NUL  
)
Popd

Wenn die Ausgabe korrekt erscheint das Echo vor rmdir entfernen.
Der Befehl rmdir oder kürze rm hat nur die Optionen /S /Q, da gibts es kein /Delete.

Gruß
LotPings

Edit Option /i im findstr zugefügt, Fehler entsorgt, bastlas Anregung eingebaut.t
bastla
bastla 26.06.2009 um 15:17:00 Uhr
Goto Top
@77559
Dem rmdir "%%i" könntest Du noch ein 2>nul spendieren (für den Versuch, schon gar nicht mehr vorhandene Unter-Unterordner zu löschen) ...

Grüße
bastla
45455
45455 26.06.2009 um 17:35:27 Uhr
Goto Top
Suppi, danke,

funktioniert prima

... das mit dem /DELETE war ein copy&paste-Fehler ... - pfeiff -