Batch zum Löschen mit For - Schleife, in Verzeichnissen mit Zähler im Namen
Hallo,
ich habe im Prinzip folgende Ordnerstruktur:
Im Moment habe ich für jedes Verzeichnis und jeden Datentyp eine Zeile in meiner batch. Ab und an entfallen Erweiterungen oder es kommen neue hinzu, und das ist eine recht müßige Änderungsarbeit.
Bekommt man das mit einer batch in einer Schleife hin und wenn ja, wie?
[Edit Biber] Verschoben aus "Windows" nach "Batch & Shell". [/Edit]
ich habe im Prinzip folgende Ordnerstruktur:
X:\Test\Verz01\uVerz01\...
X:\Test\Verz01\uVerz02\...
X:\Test\Verz01\uVerzxy\...
X:\Test\Verz02\uVerz01\...
X:\Test\Verz02\uVerz02\...
X:\Test\Verz02\uVerzxy\...
X:\Test\Verz04\uVerz01\...
X:\Test\Verz04\uVerz02\...
X:\Test\Verz04\uVerzxy\...
...
also Verzeichnisse mit einem Zähler im Namen. Die Zähler der zweiten Ebene (Verznn) sind allerdings nicht durchgängig. Ich möchte hier nur in der dritten Ebene (uVerznn) und nur in allen uVerz01 und uVerz02 Dateien *.txt, *.rtf, *.vbs und *.doc löschen.X:\Test\Verz01\uVerz02\...
X:\Test\Verz01\uVerzxy\...
X:\Test\Verz02\uVerz01\...
X:\Test\Verz02\uVerz02\...
X:\Test\Verz02\uVerzxy\...
X:\Test\Verz04\uVerz01\...
X:\Test\Verz04\uVerz02\...
X:\Test\Verz04\uVerzxy\...
...
Im Moment habe ich für jedes Verzeichnis und jeden Datentyp eine Zeile in meiner batch. Ab und an entfallen Erweiterungen oder es kommen neue hinzu, und das ist eine recht müßige Änderungsarbeit.
Bekommt man das mit einer batch in einer Schleife hin und wenn ja, wie?
[Edit Biber] Verschoben aus "Windows" nach "Batch & Shell". [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 102865
Url: https://administrator.de/forum/batch-zum-loeschen-mit-for-schleife-in-verzeichnissen-mit-zaehler-im-namen-102865.html
Ausgedruckt am: 09.01.2025 um 16:01 Uhr
6 Kommentare
Neuester Kommentar
Hallo schauan!
Das könnte (ungetestet) so gehen:
Soferne es im "Basis"-Ordner ("X:\Test") noch andere als die nummerierten Unterordner gibt, müsste die Zeile 5 etwa so aussehen:
wobei "Kennzeichen" dazu dient, die zu bearbeitenden Ordner festzulegen (lt Deinem Beispiel wäre das Kennzeichen "Verz").
Vor den beiden Löschbefehlen steht derzeit noch jeweils ein "echo", damit diese Befehle zum Testen nur angezeigt werden - wenn's passt, einfach dieses "echo" entfernen und dann wird tatsächlich gelöscht.
Grüße
bastla
Das könnte (ungetestet) so gehen:
@echo off & setlocal
set "Basis=X:\Test"
set "Typen=txt rtf vbs doc"
for /d %%i in ("%Basis%\*.*") do (
for %%t in (%Typen%) do (
echo del "uVerz01\*.%%t"
echo del "uVerz02\*.%%t"
)
)
for /d %%i in ("%Basis%\Kennzeichen*.*") do (
Vor den beiden Löschbefehlen steht derzeit noch jeweils ein "echo", damit diese Befehle zum Testen nur angezeigt werden - wenn's passt, einfach dieses "echo" entfernen und dann wird tatsächlich gelöscht.
Grüße
bastla
Hallo schauan!
Sorry wegen des vergessenen %%i in meinem ersten Ansatz (hatte leider etwas wenig Zeit), aber Du hast es ja erfreulicher Weise gleich richtig gestellt.
Die Anführungszeichen lassen sich sehr einfach vermeiden, indem Du die von mit vorgeschlagene Schreibweise verwendest:
und
Sollte es wirklich nötig sein, Werte unter Anführungszeichen zu setzen, dann kämen diese ja paarweise vor (wie "Wert2 und 3" im folgenden Beispiel)
und ließen sich durch die Schreibweise
entfernen.
Grüße
bastla
Sorry wegen des vergessenen %%i in meinem ersten Ansatz (hatte leider etwas wenig Zeit), aber Du hast es ja erfreulicher Weise gleich richtig gestellt.
Die Anführungszeichen lassen sich sehr einfach vermeiden, indem Du die von mit vorgeschlagene Schreibweise verwendest:
set "Typen=txt rtf vbs doc"
for %%t in (%Typen%) do (
Sollte es wirklich nötig sein, Werte unter Anführungszeichen zu setzen, dann kämen diese ja paarweise vor (wie "Wert2 und 3" im folgenden Beispiel)
set "Werte=Wert1 "Wert2 und 3" Wert5 Wert8"
%%~t
Grüße
bastla
Moin schauan,
Nur zur Laufzeit oder besser ausgedrückt: nur in dieser CMD-Session und allen CMD-Sessions, die aus dieser heraus gestartet werden
--> das gilt ohnehin immer.
...nur für dieses Skript --> das muss und sollte explizit angegeben werden.
Hat bastla mit dem Befehl "SetLocal" in der ersten Zeile auch getan.
Siehe "help setlocal" am CMD-Prompt (nur die ersten 4 Zeilen).
Grüße
Biber
Ich nehme mal an, mit dieser Schreibweise sitzen die Variablen Basis und Typen nur zur Laufzeit und nur für dieses Script?
Nur zur Laufzeit oder besser ausgedrückt: nur in dieser CMD-Session und allen CMD-Sessions, die aus dieser heraus gestartet werden
--> das gilt ohnehin immer.
...nur für dieses Skript --> das muss und sollte explizit angegeben werden.
Hat bastla mit dem Befehl "SetLocal" in der ersten Zeile auch getan.
Siehe "help setlocal" am CMD-Prompt (nur die ersten 4 Zeilen).
Grüße
Biber