Pour le comptage en boucle de 1 à n dans un script bat Windows

25

J'ai besoin d'exécuter une commande Windows n fois dans un fichier de script de chauve-souris. Je sais comment faire cela dans divers langages de programmation, mais je n'arrive pas à le faire correctement sur la ligne de commande Windows :-(

Je m'attendais à quelque chose comme ça

for(int i = 0; i < 100; i++) {
   // do something
}

ou même cela (mais pas entièrement au sérieux)

1.upto(100, {
   // do something
}) 

Merci!

MODIFIER

Je peux écrire un programme en java, perl, c ou quoi que ce soit qui va générer un script bat qui ressemble à ceci

for %%N in (1 2 3 4 5 6 7 8 9 10 11 12) do echo %%N

etc. Ou encore "mieux":

echo 1
echo 2
echo 3
echo 4
echo 5
echo 6
echo 7
echo 8
echo 9
echo 10
echo 11
echo 12

puis l'exécuter ... Mais le fait est que j'ai besoin d'un moyen concis pour spécifier une plage de nombres à parcourir dans le script.

Merci!

raoulsson
la source
1
Les réponses ici sont parfaitement bonnes, mais pour l'amour de Dieu ... lot? Vraiment? Je recommanderais fortement de passer à une langue plus moderne.
EBGreen
Il ne semble pas qu'il ait le choix en la matière.
wolfgangsz
Je n'ai rien vu qui implique qu'il n'y a pas de choix. En fait, il dit qu'il peut écrire dans n'importe quelle langue, donc je dirais que sans plus d'informations, il semble qu'il ait le choix.
EBGreen
Les gars, j'ai besoin de déployer du code qui est écrit dans un langage moderne PAR un script ...
raoulsson
1
Qu'il soit ou non requis - c'est parfois le bon outil pour le travail. Vous ne pouvez pas garantir que powershell, et encore moins bash, python, perl, etc. soient installés sur un boîtier serveur Windows XP ou 2003. Le lot est une solution parfaitement acceptable.
Goyuix

Réponses:

44

Vous pouvez le faire de la même manière comme ceci:

ECHO Start of Loop

FOR /L %i IN (1,1,5) DO (
  ECHO %i
)

Le 1,1,5 est décodé comme:

(start,step,end)

Notez également que si vous l'incorporez dans un fichier de commandes, vous devrez utiliser le signe du double pourcentage (%%) pour préfixer vos variables, sinon l'interpréteur de commandes essaiera d'évaluer la variable% i avant d'exécuter la boucle.

Goyuix
la source
3
"ECHO Start of Loop" sera exécuté à chaque étape, pas seulement au début.
pause jusqu'à nouvel ordre.
1
De plus, l'utilisation d'un @signe supprime l'impression des commandes lorsqu'elles sont exécutées à partir de la ligne de commande. "... DO @ (..."
pause jusqu'à nouvel ordre.
Cela ne fonctionne qu'avec le / L après le "POUR". Pourquoi ça?
raoulsson
1
Faire un pour /? et vous trouverez: FOR / L% variable IN (début, étape, fin) commande DO [paramètres de commande] L'ensemble est une séquence de nombres du début à la fin, par quantité d'étape. Donc (1,1,5) générerait la séquence 1 2 3 4 5 et (5, -1,1) générerait la séquence (5 4 3 2 1)
EBGreen
Il est préférable d'utiliser %%idans votre texte et d'ajouter un commentaire selon lequel il est %idestiné à une exécution directe en ligne de commande. La plupart des utilisateurs vont le tester dans le fichier BAT et essayer de trouver la raison pour laquelle ils obtiennent une erreur (comme moi).
i486
8

La syntaxe est

FOR %%A IN (1 2 3) DO ECHO %%A

Bon article ici et spécificités XP ici

Andy
la source
6

Directement depuis la ligne de commande:

for /L %n in (1,1,100) do @echo %n

Utilisation d'un fichier batch:

@echo off
for /L %%n in (1,1,100) do echo %%n

Affiche:

1
2
3
...
100
fmoraesjr
la source
que faire si la séquence de numéros est 0001 à 00100+ etc?
nwgat