2008-12-11 8 views
4

à des fins de test J'ai besoin d'un répertoire récursif avec certains fichiers, qui arrive à la longueur maximale du chemin.Comment mettre fin à une boucle for correctement

Le script utilisé pour la création ne se compose que de deux boucles for, comme suit:

for /L %%a in (1 1 255) do @(
    mkdir %%a 
    && cd %%a 
    && for /L %%b in (1 1 %random%) do @(
      echo %%b >> %%a.txt 
     ) 
) 

Maintenant, je voudrais intégrer ce script dans le cadre d'un autre script, car plus est à faire, mais Je ne peux pas ajouter d'autres commandes ou refuse de travailler. Je l'utilise sous Windows Vista, si cela vous est utile.

ne cela fonctionne si j'écris "@ECHO OFF "en première ligne, ni avec" echo done »sur la dernière ligne

sortie sur commandline est:.

X:\Scripte>recursive.cmd 
OFFfor /L %a in (1 1 255) do @(mkdir %a 
The system cannot find the path specified. 

EDIT: semble être un problème avec la couche 8, le problème semble être dans la commande shell utilisé, si utilisé le cmd.exe nu, ça marche, avec shell de commande de visual studio 2008 ça ne marche pas, comme indiqué ci-dessus

de toute façon, merci.

+0

Appelez-vous ce script à partir de l'autre script ou copiez-collez-le dans un autre script? Pouvez-vous s'il vous plaît fournir plus de détails. –

+0

Il semble, à partir de la sortie que vous avez fournie, que le caractère de nouvelle ligne dans votre éditeur de texte (entre "@echo off" et "for/L ...") ne soit pas correct. Qu'est-ce que vous utilisez pour modifier le fichier batch? –

+0

J'ai utilisé le bloc-notes ++ pour éditer le fichier. semble étrange, c & p à un autre fichier fonctionne, mais seulement une fois, puis, avec un nouveau shell cmd il échoue à nouveau. –

Répondre

1

Je ne pense pas que vous ayez besoin de '@' devant les parens ou de '& &' dans le corps de la boucle for; les parens s'occupent de gérer plusieurs instructions dans la boucle for.

Les œuvres suivantes pour moi:

@echo OFF 

for /L %%a in (1 1 255) do (
    @echo a = %%a 
    mkdir %%a 
    cd %%a 
    for /L %%b in (1 1 %random%) do (
     echo %%b >> %%a.txt 
    ) 
) 

@echo done 
+0

Le "@" n'est pas un needet, mais si je supprime le "&&" cela ne marche pas non plus. –

+0

Hmmm. Qu'est-ce que tu utilises pour éditer le script? Comme Bernhard le mentionne dans son commentaire, il y a quelque chose d'étrange ici. Vous auriez seulement besoin du '&&' de toutes les commandes étaient sur la même ligne. –

+0

s/'&&' de/'&&' si –

2

Je ne comprends pas comment ajouter un petit commentaire ci-dessous une réponse, donc je vais juste le faire ici.

Le signe @ en face de la parenthèse ouvrante n'est nécessaire que si l'écho n'est pas déjà désactivé. Dans ce cas, ce qui se passerait sans le signe @, c'est que chaque commande de la boucle FOR serait renvoyée en écho.

Et, oui, la raison d'avoir besoin & & est que l'éditeur de texte met tout sur une ligne. Mais personne n'a posté de solution. Il suffit de copier et coller dans le Bloc-notes, puis de séparer les lignes si nécessaire.

Questions connexes