Comment faire une boucle dans un fichier batch Windows?


170

Quelle est la syntaxe d'une boucle FOR dans un fichier de commandes Windows?

Réponses:


128
FOR %%A IN (list) DO command parameters

list est une liste de tous les éléments, séparés par des espaces, des virgules ou des points-virgules.

la commande peut être n'importe quelle commande interne ou externe, un fichier batch ou même - sous OS / 2 et NT - une liste de commandes

paramètres contient les paramètres de ligne de commande pour la commande. Dans cet exemple, la commande sera exécutée une fois pour chaque élément de la liste, en utilisant des paramètres si spécifiés.

Un type spécial de paramètre (ou même de commande) est %% A, qui sera remplacé par chaque élément de la liste consécutivement.

Depuis les boucles FOR


3
Puis-je donner la plage (1 TO 100) dans la liste?
Pradeep

36
FOR /L %x IN (1,1,100) DO ...
Joey

mettez des parenthèses [ parameters ]si vous souhaitez inclure plusieurs lignes dans votre forboucle
Frank Bryce

1
@aaiezza, je partage votre opinion. Je me bats avec ces boucles sanglantes en ce moment, je travaille de manière complètement inattendue, et je n'ai aucune idée de ce qui contrôle quoi que ce soit en regardant la sortie. Des trucs horribles. Utile, mais horrible.
RockDoctor

224

Si vous voulez faire quelque chose x fois, vous pouvez le faire:

Exemple (x = 200):

FOR /L %%A IN (1,1,200) DO (
  ECHO %%A
)

1,1,200 veux dire:

  • Début = 1
  • Incrément par pas = 1
  • Fin = 200

17
Merci pour l'ajout. Cela peut être plus clair si vous remplacez la valeur de départ de votre exemple par quelque chose de différent de l'incrément.
Warren Stevens

7
La valeur finale est inclusive.
Roland Pihlakas du

54

Type:

for /?

et vous obtiendrez plusieurs pages de texte d'aide.


8
Je préfère cela à la réponse acceptée car il gère les différentes versions de DOS / Windows. «Pour» a été amélioré de manière assez significative, au fil des ans, et la question ne dit pas quelle (s) version (s) est (sont) ciblée (s) ni quel scénario est tenté.
Mattias Andersson

34

Exécutez conditionnellement une commande plusieurs fois.

  • syntax-FOR-Files

    FOR %%parameter IN (set) DO command 
    
  • syntax-FOR-Files-Rooted au chemin

    FOR /R [[drive:]path] %%parameter IN (set) DO command 
    
  • syntax-FOR-Folders

    FOR /D %%parameter IN (folder_set) DO command 
    
  • syntax-FOR-Liste de nombres

    FOR /L %%parameter IN (start,step,end) DO command 
    
  • syntax-FOR-File contenu

    FOR /F ["options"] %%parameter IN (filenameset) DO command 
    

    ou

    FOR /F ["options"] %%parameter IN ("Text string to process") DO command
    
  • Résultats de la commande syntax-FOR

    FOR /F ["options"] %%parameter IN ('command to process') DO command
    

Il

  • Prenez un ensemble de données
  • Rendre un paramètre FOR %%Gégal à une partie de ces données
  • Exécutez une commande (en utilisant éventuellement le paramètre dans le cadre de la commande).
  • -> Répéter pour chaque élément de données

Si vous utilisez la commande FOR sur la ligne de commande plutôt que dans un programme de commandes, utilisez un seul signe de pourcentage: %Gau lieu de %%G.

Paramètres FOR

  • Le premier paramètre doit être défini à l'aide d'un seul caractère, par exemple la lettre G.

  • FOR %%G IN ...

    À chaque itération d'une boucle FOR, la IN ( ....)clause est évaluée et %%Gdéfinie sur une valeur différente

    Si cette clause aboutit à une valeur unique, %% G est défini comme égal à cette valeur et la commande est exécutée.

    Si la clause aboutit à plusieurs valeurs, des paramètres supplémentaires sont implicitement définis pour les contenir. Ceux-ci sont automatiquement attribués par ordre alphabétique %%H %%I %%J... (définition implicite des paramètres)

    Si le paramètre fait référence à un fichier, une référence de variable améliorée peut être utilisée pour extraire le nom de fichier / chemin / date / taille.

    Vous pouvez bien sûr choisir n'importe quelle lettre de l'alphabet autre que %%G. mais c'est un bon choix car il n'entre en conflit avec aucune des lettres de format de chemin (a, d, f, n, p, s, t, x) et fournit la plus longue série de lettres non conflictuelles à utiliser comme paramètres implicites .


1
Comment utiliser la boucle for pour entrer dans une variable précédemment définie? J'ai essayé pour / F "tokens = 2 delims =," %% i in (% a%) do (… .. mais cela ne fonctionne pas. Cela échoue en disant "(était inattendu à ce moment")
Shivani

Salut. Est-ce que %a%donner le nom d'un fichier normal? Il est difficile de vous aider avec ce format. N'hésitez pas à poser une nouvelle question après avoir lu Comment demander .
J. Chomel

2
@jumping_monkey, La commande FOR crée des variables de paramètres qui sont identifiées par une lettre plutôt qu'un nombre (par exemple %% G). Les extensions de paramètre de format de chemin peuvent également être appliquées à ces derniers. Pour éviter toute confusion entre les deux ensembles de lettres, évitez d'utiliser les lettres (a, d, f, n, p, s, t, x, z) comme paramètres FOR ou choisissez simplement une lettre de paramètre FOR qui est MAJUSCULE.
J. Chomel

Salut @ J.Chomel, OK So for example in a reference like %%~fG the %%G is the FOR parameter, and the ~f is the Parameter Expansion.(ici) [ ss64.com/nt/syntax-args.html ), merci à vous. Salut mon pote.
jumping_monkey

15

FOR vous donnera toutes les informations dont vous aurez besoin sur les boucles FOR, y compris des exemples d'utilisation correcte.


13

Essayez ce code:

@echo off
color 02
set num1=0
set num2=1 
set terminator=5
:loop
set /a num1= %num1% + %num2%
if %num1%==%terminator% goto close
goto open
:close
echo %num1%
pause 
exit
:open
echo %num1%
goto loop

num1est le nombre à incrémenter et num2est la valeur ajoutée à num1et terminator est la valeur à laquelle num1finira. Vous pouvez indiquer une valeur différente pour le terminateur dans cette instruction ( if %num1%==%terminator% goto close). Il s'agit de l'expression booléenne goto close est le processus si le booléen est true et goto open est le processus si le boolean est false.


C'est le plus simple à comprendre. Les autres réponses ne donnent pratiquement aucune explication sur ce que font les commandes et les indicateurs. Pour un type de javascript uniquement, les fichiers batch ne sont pas du tout intuitifs.
1934286

5
@echo off
echo.
set /p num1=Enter Prelim:
echo.
set /p num2=Enter Midterm:
echo.
set /p num3=Enter Semi:
echo.
set /p num4=Enter Finals:
echo.
set /a ans=%num1%+%num2%+%num3%+%num4%
set /a avg=%ans%/4
ECHO %avg%
if %avg%>=`95` goto true
:true
echo The two numbers you entered were the same.
echo.
pause
exit

5

De la FOR /?documentation d'aide:

FOR% variable IN (set) commande DO [paramètres de commande]

% variable Spécifie un paramètre remplaçable à une seule lettre.
(set) Spécifie un ensemble d'un ou plusieurs fichiers. Des caractères génériques peuvent être utilisés. commande Spécifie la commande à exécuter pour chaque fichier.
command-parameters
Spécifie des paramètres ou des commutateurs pour la commande spécifiée.

Pour utiliser la commande FOR dans un programme de commandes, spécifiez la variable %% au lieu
de la variable%. Les noms de variables sont sensibles à la casse, donc% i est différent
de% I.

Si les extensions de commande sont activées, les
formes supplémentaires suivantes de la commande FOR sont prises en charge:

FOR / D% variable IN (set) commande DO [paramètres de commande]

If set contains wildcards, then specifies to match against directory  
names instead of file names.                                          

FOR / R [[lecteur:] chemin]% variable IN (set) commande DO [commande-paramètres]

Walks the directory tree rooted at [drive:]path, executing the FOR    
statement in each directory of the tree.  If no directory             
specification is specified after /R then the current directory is     
assumed.  If set is just a single period (.) character then it        
will just enumerate the directory tree.                               

FOR / L% variable IN (début, étape, fin) Commande DO [paramètres-commande]

The set is a sequence of numbers from start to end, by step amount.   
So (1,1,5) would generate the sequence 1 2 3 4 5 and (5,-1,1) would   
generate the sequence (5 4 3 2 1)                                     
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.