2010-12-07 48 views
7

J'essaie actuellement d'écrire un script .cmd Windows Shell qui serait itérer sur un ensemble de dossiers. Cependant, même le plus simple script suivant:Comment parcourir une série de dossiers dans Windows Shell?

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

sorties:

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

Qu'est-ce que je fais mal? Comment puis-je modifier ce script afin qu'il itère sur ce dossier et une fois qu'il voit qu'il n'y a pas de sous-dossier nommé "Subfolder", il crée ce sous-dossier? Y a-t-il aussi un bon tutoriel sur l'écriture de tels scripts?

Répondre

4

Cela fonctionne pour moi:

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

Tout devrait-il être sur une seule ligne? – sharptooth

+0

Oui. Au moins dans ma version, cela a fonctionné comme ça. Il existe peut-être un moyen de le faire sur plusieurs lignes, mais les fichiers batch classiques fonctionnent comme ça. Et généralement, les gens utilisent 'goto' pour avoir plusieurs lignes. – detunized

+0

Merci beaucoup. Le problème était que je ne m'attendais pas à ce que les sauts de ligne importent. – sharptooth

8

Pour (sous) dossier-itération vous devez utiliser un paramètre for différent.

Donc, si vous voulez liste tous les répertoires de C: vous devriez faire ceci:

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

Notez le paramètre /d qui indique un répertoire. Pour aller dans les sous-répertoires que vous devez faire une récursif pour avec /r

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

Cela itérer à travers tous les sous-répertoires de Windows la recherche de fichiers JPG. Faible voir, vous devriez être en mesure de faire /d /r et this reference suggests vous pouvez - Je ne peux tout simplement pas, mais peut-être que vous êtes en mesure de le faire?

Une solution que je notai rapidement vers le bas est de faire juste un dir de tous les répertoires dans une boucle:

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

Notez que dir est utilisé conjointement avec /ad/s/b qui effectue une liste récursive des répertoires, l'impression de la les noms des répertoires trouvés.
Avec ces outils dans votre main, vous devriez être capable de faire votre construction if-subfolder. Notez que vous pourriez avoir besoin