Batch mehrere Ordner bei Löschvorgang ausschließen
Ich habe in einem Ordner z.B. unter C:\temp 20 Ordner, die ich aufräumen will.
In meiner ini Datei stehen die Ordner, die ich nicht gelöscht haben will, der Rest soll gelöscht werden.
ini-Datei
ordner1=xyz1
ordner2=xyz2
ordner3=xyz3
ordner4=xyz4
Wie ich diese Ordner aus der ini Auslese ist mir klar:
for /f "delims== tokens=1,2" %%i in ('findstr "ordner1" config.ini') do @set ordner1=%%j
.
.
.
Da aber das DOS Tool del keinen Ausschluss vorsieht, suche ich nach einer Möglichkeit wie ich mein Problem lösen kann.
Verschieben ist keine Lösung, da viel zu Zeitaufwendig (mehrere Hunderttausende Dateien).
Eine andere Möglichkeit habe ich noch nicht gefunden.
Bin für jede Hilfe dankbar.
Grüße
Kim
In meiner ini Datei stehen die Ordner, die ich nicht gelöscht haben will, der Rest soll gelöscht werden.
ini-Datei
ordner1=xyz1
ordner2=xyz2
ordner3=xyz3
ordner4=xyz4
Wie ich diese Ordner aus der ini Auslese ist mir klar:
for /f "delims== tokens=1,2" %%i in ('findstr "ordner1" config.ini') do @set ordner1=%%j
.
.
.
Da aber das DOS Tool del keinen Ausschluss vorsieht, suche ich nach einer Möglichkeit wie ich mein Problem lösen kann.
Verschieben ist keine Lösung, da viel zu Zeitaufwendig (mehrere Hunderttausende Dateien).
Eine andere Möglichkeit habe ich noch nicht gefunden.
Bin für jede Hilfe dankbar.
Grüße
Kim
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 100449
Url: https://administrator.de/contentid/100449
Ausgedruckt am: 25.11.2024 um 18:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo Kim!
Bei nur 20 Ordnern wäre es vermutlich sicherer (und auch nicht viel aufwändiger), die zu löschenden Ordner festzulegen ...
Trotzdem: Wenn Deine "config.ini" nur die Ordnernamen enthielte (was einen Vergleich der gesamten Zeile möglich machte), würde ich das etwa so versuchen (das "echo" vor dem "del" soll ein gefahrloses Testen erlauben):
Zu beachten wäre, dass nur exakte Übereinstimmung des in der "config.ini" angegebenen Pfades zum Ausschluss führt, also ein Eintrag "Dieser Ordner" einen existierenden Ordner "Dieser Ordner auch" nicht ausschließen würde (was sich allerdings durch den Ersatz des Schalters "/x" durch "/b" erreichen ließe). Achtung auch auf zB zusätzliche Leerzeichen am Zeilenende (da dadurch ebenfalls keine Übereinstimmung mehr gegeben wäre)!
Grüße
bastla
[Edit] Bei Angabe des Ordners ("C:\Temp") im "for /d" muss die Ordnerliste in "config.ini" den vollständigen Pfad (also zB "C:\Temp\xyz1") enthalten, oder die "findstr"-Schreibweise auf
geändert werden. [/Edit]
Bei nur 20 Ordnern wäre es vermutlich sicherer (und auch nicht viel aufwändiger), die zu löschenden Ordner festzulegen ...
Trotzdem: Wenn Deine "config.ini" nur die Ordnernamen enthielte (was einen Vergleich der gesamten Zeile möglich machte), würde ich das etwa so versuchen (das "echo" vor dem "del" soll ein gefahrloses Testen erlauben):
for /d %%i in ("C:\Temp\*.*") do @findstr /i /x /c:"%%i" "config.ini">nul || echo del "%%i" /s /q
Grüße
bastla
[Edit] Bei Angabe des Ordners ("C:\Temp") im "for /d" muss die Ordnerliste in "config.ini" den vollständigen Pfad (also zB "C:\Temp\xyz1") enthalten, oder die "findstr"-Schreibweise auf
findstr /i /x /c:"%%~nxi" "config.ini"
Hallo Kim!
Zu Deinem "findstr"-Problem fällt mir auf die Schnelle nix ein, außer das Ganze direkt aus der Console zu starten:
wobei noch anzumerken wäre, dass die "config.ini" entweder im aktuellen Verzeichnis liegen muss oder, besser, mit vollständigem Pfad (etwa: "C:\Scripts\config.ini") anzugeben wäre.
Grüße
bastla
Zu Deinem "findstr"-Problem fällt mir auf die Schnelle nix ein, außer das Ganze direkt aus der Console zu starten:
for /d %i in ("C:\temp\test\*.*") do @findstr /i /x /c:"%i" "config.ini">nul || @echo del "%i" /s /q
Grüße
bastla
Hallo allerseits,
der Beitrag ist schon etwas älter aber als Hinweis für alle die das auch gebrauchen können und Windows 8.1 einsetzen:
aus einem mir unerfindlichen Grund funktioniert
dies unter Windows 8.1 nicht mehr. Nach langem probieren bin ich darauf gestoßen, das der Übeltäter die findstr Funktion ist.
Wenn man den Parameter "/x" wegläßt klappt es, sonst nicht. Laut "findstr /?" Aufruf bedeutet " /X Gibt Zeilen aus, die vollkommen übereinstimmen." Bei meinem Test stimmte der Text vollkommen überein, nur daß nichts gefunden wurde, sprich keine Ausgabe erfolgte.
An den " Anführungszeichen kann es auch nicht liegen, denn ich habe es versuchshalber mit Suchbegriffen mit ganzen Wörtern probiert.
So geht es:
Nachtrag:
Ich hatte gedacht die Lösung gefunden zu haben - irgendwie hat findstr eine Macke unter Windows 8.1:
ein einfacher Test funktioniert mit test.txt Inhalt:
test2
test3
test4
jedoch wenn ich mit kompletten Pfaden arbeiten will geht auch dies nicht mehr
Hat vielleicht jemand eine Lösung ohne findstr die utner W8.1 läuft ?
Gruß Rüdi
der Beitrag ist schon etwas älter aber als Hinweis für alle die das auch gebrauchen können und Windows 8.1 einsetzen:
aus einem mir unerfindlichen Grund funktioniert
for /d %%i in ("C:\temp\test\*") do @findstr /i /x /c:"%%i" "C:\temp\config.ini">nul || @rmdir "%%i" /S /Q
dies unter Windows 8.1 nicht mehr. Nach langem probieren bin ich darauf gestoßen, das der Übeltäter die findstr Funktion ist.
Wenn man den Parameter "/x" wegläßt klappt es, sonst nicht. Laut "findstr /?" Aufruf bedeutet " /X Gibt Zeilen aus, die vollkommen übereinstimmen." Bei meinem Test stimmte der Text vollkommen überein, nur daß nichts gefunden wurde, sprich keine Ausgabe erfolgte.
An den " Anführungszeichen kann es auch nicht liegen, denn ich habe es versuchshalber mit Suchbegriffen mit ganzen Wörtern probiert.
So geht es:
for /d %%i in ("C:\temp\test\*") do @findstr /i /c:"%%i" "C:\temp\config.ini">nul || @rmdir "%%i" /S /Q
Nachtrag:
Ich hatte gedacht die Lösung gefunden zu haben - irgendwie hat findstr eine Macke unter Windows 8.1:
ein einfacher Test funktioniert mit test.txt Inhalt:
test2
test3
test4
d:\__Bkp_Batch>findstr /i /c:test2 test.txt
jedoch wenn ich mit kompletten Pfaden arbeiten will geht auch dies nicht mehr
Hat vielleicht jemand eine Lösung ohne findstr die utner W8.1 läuft ?
Gruß Rüdi