
45455
26.06.2009, aktualisiert um 14:54:36 Uhr
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 119159
Url: https://administrator.de/forum/not-in-for-schleife-119159.html
Ausgedruckt am: 24.05.2025 um 09:05 Uhr
4 Kommentare
Neuester Kommentar
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:
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 ...
[/Edit]
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"
Grüße
bastla
[Edit] @77559: Wusste ich doch, dass ich "findstr /G" Dir überlassen sollte ...

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,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.
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