39 votes

boucle forcompter de 1 à n dans une bat boucle forscriptboucle for.

Je dois exécuter une commande Windows n fois dans un fichier bat script. Je sais comment faire dans différents langages de programmation mais je n'arrive pas à le faire correctement sur la ligne de commande Windows :-(

Je m'attendrais à quelque chose comme

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

ou même ceci (mais pas tout à fait sérieusement)

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

Merci !

EDITAR

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

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

et ainsi de suite. Ou même "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

et ensuite l'exécuter... Mais le problème est que j'ai besoin d'un moyen concis de spécifier une plage de nombres à parcourir par itération... sur le script.

Merci !

1 votes

Les réponses ici sont parfaitement bonnes, mais pour l'amour de Dieu... le lot ? Vraiment ? Je vous recommande vivement de passer à une langue plus moderne.

0 votes

Il n'a pas l'air d'avoir le choix.

0 votes

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.

65voto

Eric Minkes Points 1051

Vous pouvez procéder de la manière suivante :

ECHO Start of Loop

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

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

(start,step,end)

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

3 votes

"ECHO Start of Loop" sera exécuté à chaque étape, pas seulement au début.

1 votes

De même, l'utilisation d'un @ supprime l'impression des commandes lorsqu'elles sont exécutées à partir de la ligne de commande. "... DO @( ..."

0 votes

Cela ne fonctionne qu'avec le /L après le "FOR". Pourquoi ça ?

15voto

fmoraesjr Points 111

Directement à partir de 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

0 votes

Que se passe-t-il si la séquence de numéros est de 0001 à 00100+ etc ?

10voto

Jared Points 762

La syntaxe est

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

Bon article aquí et les spécificités de XP aquí

0 votes

Les exemples utilisant "pour /L ..." sont didactiquement plus agréables pour moi (en particulier serverfault.com/a/59026/559613 ), mais j'aime les liens externes que vous avez fournis.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X