2009-04-02 7 views
0

Je dispose d'un fichier batch qui fait quelque chose comme çaComment utiliser une variable d'itération dans une boucle for dans des fichiers batch MS-DOS?

for %%a in (1 2 3 4 5) do dir > %%a.output 

%%a me donne juste un .

Comment puis-je utiliser la valeur de la %%a variable pour attribuer le nom de fichier (par exemple 1.output, 2. sortie)?

+0

BTW, quelle version du processeur de commande utilisez-vous? (Qu'est-ce que vous obtenez lorsque vous entrez 'ver' à l'invite?) –

+0

Etes-vous en train d'entrer/tester ceci à la main à une invite CMD, ou en exécutant un fichier batch? Cela fait une différence. Assurez-vous de ne pas entrer %% à l'invite CMD, mais uniquement dans un fichier BAT. – Eddie

+0

Windows 98 [Version 4.10.2222] – vivekian2

Répondre

2

Vous devez entourer votre variable:

for %a in (1 2 3 4 5) do dir > %a%.output 
1

Votre syntaxe de commande me semble correcte. Je pense que la ligne d'un fichier de commandes, tout comme, pour produire ces commandes:

dir > 1.output 
dir > 2.output 
dir > 3.output 
dir > 4.output 
dir > 5.output 

qui à son tour créer 1.output, 2.output, etc.

Comme une pointe de débogage, vous pouvez essayer de changer cela ligne à quelque chose comme ceci:

for %%a in (1 2 3 4 5) do echo dir ^> %%a.output 

Notez le ^, qui est utilisé pour échapper à la redirection >.

aussi:

  • Rappelez-vous d'utiliser %%a dans des fichiers batch mais %a à la ligne de commande. Rappelez-vous que les variables for sont sensible à la casse; %%A est différent de %%a.

Mise à jour

Il a été longtemps que je devais obtenir un fichier de traitement par lots de travail sous cette ancienne version du système d'exploitation, mais je ne serais pas surpris si la redirection était incompatible avec for retour dans la journée.

Vous pouvez essayer ceci:

for %%a in (1 2 3 4 5) do call helper.bat %%a 

En helper.bat:

dir > %1.output 

Ou, si vous ne voulez pas un fichier de commandes supplémentaires, les combiner en un seul fichier:

if .%1==.sub goto do_sub 
for %%a in (1 2 3 4 5) do call %0 sub %%a 
goto end 
:sub 
shift 
dir > %1.output 
:end 
+0

Non, cela ne fonctionne pas. J'obtiens la sortie% a.out. – vivekian2

0

Je n'ai pas de système Win98 à ma disposition, mais saisissez for /? dans une boîte DOS et voyez s'il y a quelque chose là-bas ça peut t'aider.

La façon de le faire sous Windows NT OS à base est:

FOR /L %variable IN (start,step,end) DO command [command-parameters] 

Donc, votre déclaration serait quelque chose comme:

FOR /L %%a IN (1,1,5) DO echo dir ^> %%a.output 

Peut-être il y a quelque chose de similaire dans le DOS sous Win98.

Questions connexes