schauan
Goto Top

Batch zum Löschen mit For - Schleife, in Verzeichnissen mit Zähler im Namen

Hallo,

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.

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]

Content-Key: 102865

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

Printed on: April 26, 2024 at 15:04 o'clock

Member: bastla
bastla Nov 28, 2008 at 07:29:53 (UTC)
Goto Top
Hallo schauan!

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"  
	)
)
Soferne es im "Basis"-Ordner ("X:\Test") noch andere als die nummerierten Unterordner gibt, müsste die Zeile 5 etwa so aussehen:
for /d %%i in ("%Basis%\Kennzeichen*.*") do (
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
Member: schauan
schauan Nov 28, 2008 at 10:01:14 (UTC)
Goto Top
Hallo bastla,

danke für Deinen Vorschlag, war die richtige Richtung.
Ich habe den code etwas angepasst, und mit dir getestet.
So läuft er nun - erst mal ohne den Hinweis mit den anderen Unterordnern:

@echo off & setlocal
set Basis="X:\Test"  
set Typen="txt rtf vbs doc pdf"  

for /d %%i in ("%Basis%\*.*") do (   
    for %%t in ("%Typen%") do (   
            dir %%i\uVerz01\*.%%t 
            dir %%i\uVerz02\*.%%t
	) 
)
Member: schauan
schauan Nov 28, 2008 at 11:00:29 (UTC)
Goto Top
Hallo bastla,

ich habe doch noch eine Frage. Die Befehlsausgabe bringt bei der ersten und letzen Erweiterung Anführungszeichen mit. Kann man das verhindern? Das funktioniert in diesem Falle zwar, sieht aber seltsam aus.

z.B.
dir /b X:\Test\Verz01\uVerz01\*.""txt
und
dir /b X:\Test\Verz01\uVerz01\*.pdf""

Vielleicht nutze ich so eine Schleife mal anderswo und die Anführungszeichen stören dann.

/b habe ich eingefügt, um die Ausgabe einzuschränken. Da kommt später noch 2>> nul ans Ende, damit ich nur das Ergebnis sehe.
Member: bastla
bastla Nov 28, 2008 at 11:40:46 (UTC)
Goto Top
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:
set "Typen=txt rtf vbs doc"
und
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"
und ließen sich durch die Schreibweise
%%~t
entfernen.

Grüße
bastla
Member: schauan
schauan Nov 28, 2008 at 12:52:51 (UTC)
Goto Top
Hallo Bastla,

danke, ich habe es mit den Anführungszeichen wie in Deinem ersten Posting gemacht. Da merkt man, wo es mir an Wissen fehlt. Ich habe mit meinen bescheidenen Kenntnissen experimentiert, und zuerst lief es nicht. Irgendwo hatte ich was von Set im Hinterkopf, und da war natürlich keine Variable Basis und Tyxpen im System. Da wurden die Anführungszeichen im nächsten Schritt versetzt ... Und irgendwann liefs irgendwie mit %%i face-wink

Ich nehme mal an, mit dieser Schreibweise sitzen die Variablen Basis und Typen nur zur Laufzeit und nur für dieses Script?
Member: Biber
Biber Nov 28, 2008 at 13:12:15 (UTC)
Goto Top
Moin schauan,

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