2010-12-07 1 views
7

Ich versuche gerade, ein .cmd Windows Shell-Skript zu schreiben, das über eine Reihe von Ordnern iterieren würde. Aber auch die folgende einfachste Skript:Wie kann ich über einen Satz von Ordnern in Windows Shell iterieren?

echo "%ROOT%" 
for %%f in ("%ROOT%\Binaries\") do (
    echo "%%f" 
    if not exist "%%f\Subfolder" 
     md "%%f\Subfolder" 
) 

Ausgänge:

CurrentDir>echo "<ActualPathToRoot>" 
"<ActualPathToRoot>" 
%f\Subfolder was unexpected at this time 
CurrentDir>if exists "%f\Subfolder" 

Was mache ich falsch? Wie ändere ich dieses Skript, so dass es über diesen einen Ordner iteriert und sobald er sieht, dass es keinen Unterordner namens "Unterordner" gibt, erstellt er diesen Unterordner? Gibt es auch ein gutes Tutorial zum Schreiben solcher Skripte?

Antwort

4

Dies funktioniert für mich:

echo %ROOT% 
for /D %%f in (%ROOT%\Binaries\*) do echo %%f && if not exist %%f\Subfolder md %%f\Subfolder 
+0

Sollte es alles auf einer einzigen Zeile sein? – sharptooth

+0

Ja. Zumindest in meiner Version hat es so funktioniert. Vielleicht gibt es jetzt eine Möglichkeit, das in mehreren Zeilen zu machen, aber klassische Batch-Dateien funktionieren so. Und normalerweise würden Leute 'goto' verwenden, um viele Zeilen zu haben. – detunized

+0

Vielen Dank. Das Problem war, dass ich nicht erwartet hatte, dass es sich um Zeilenumbrüche handelte. – sharptooth

8

Für (Unter-) Ordner-Iteration Sie einen anderen for Parameter verwenden müssen.

Also, wenn Sie alle Verzeichnisse von C bis Liste möchten: Sie sollten dies tun:

for /d %%A in (C:\*) do echo %%A 

Hinweis der Parameter /d, die ein Verzeichnis angibt. Gehen in die Unterverzeichnisse müssen Sie für eine rekursive tun mit /r

for /r C:\Windows %%A in (*.jpg) do echo %%A 

Dies würde Iterierte durch alle Windows Unterverzeichnisse suchen JPGs. Low siehe, Sie sollten in der Lage zu tun /d /r und this reference suggests Sie können - ich kann einfach nicht, aber vielleicht können Sie dies tun?

Eine Abhilfe, die ich kritzelte schnell ist auf nur ein dir alle Verzeichnisse in einem do for-Schleife:

for /f "delims=" %%A in ('dir /ad/s/b') do echo %%A 

Beachten Sie, dass dir in Verbindung mit /ad/s/b verwendet wird, die eine rekursive Auflistung von Verzeichnissen führt, das den Druck Namen der gefundenen Verzeichnisse.
Mit diesen Tools in der Hand sollten Sie in der Lage sein, Ihr if-Unterordner Konstrukt zu tun. Beachten Sie, dass Sie möglicherweise benötigen

Verwandte Themen