Come si esegue il loop in un file batch di Windows?


170

Qual è la sintassi per un ciclo FOR in un file batch di Windows?

Risposte:


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

list è un elenco di tutti gli elementi, separati da spazi, virgole o punti e virgola.

Il comando può essere qualsiasi comando interno o esterno, file batch o persino - in OS / 2 e NT - un elenco di comandi

parametri contiene i parametri della riga di comando per il comando. In questo esempio, il comando verrà eseguito una volta per ogni elemento nell'elenco, utilizzando i parametri se specificato.

Un tipo speciale di parametro (o anche comando) è %% A, che verrà sostituito da ciascun elemento dall'elenco consecutivamente.

Dai loop FOR


3
Posso indicare l'intervallo (da 1 a 100) nell'elenco?
Pradeep,

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

metti le parentesi [ parameters ]se vuoi includere più righe nel tuo forloop
Frank Bryce il

1
@aaiezza, secondo la tua opinione. Sto combattendo con questi circuiti sanguinanti in questo momento, lavorando completamente inaspettatamente, e non ho idea di cosa stia controllando qualcosa guardando l'output. Roba orribile. Utile, ma orribile.
RockDoctor,

224

Se vuoi fare qualcosa x volte, puoi farlo:

Esempio (x = 200):

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

1,1,200 si intende:

  • Inizio = 1
  • Incremento per passaggio = 1
  • Fine = 200

17
Grazie per l'aggiunta. Potrebbe essere più chiaro se cambi il valore iniziale nel tuo esempio in qualcosa di diverso dall'incremento.
Warren Stevens,

7
Il valore finale è inclusivo.
Roland Pihlakas,

54

Genere:

for /?

e otterrai diverse pagine di testo di aiuto.


8
Preferisco questo rispetto alla risposta accettata perché gestisce le diverse versioni di DOS / Windows. "For" è stato migliorato in modo abbastanza significativo, nel corso degli anni, e la domanda non dice quale versione (e) è (come) presa di mira né quale scenario viene tentato.
Mattias Andersson,

34

Eseguire condizionalmente un comando più volte.

  • sintassi-PER-Files

    FOR %%parameter IN (set) DO command 
    
  • sintassi-FOR-Files-Rooted at Path

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

    FOR /D %%parameter IN (folder_set) DO command 
    
  • sintassi-FOR-Elenco di numeri

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

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

    o

    FOR /F ["options"] %%parameter IN ("Text string to process") DO command
    
  • sintassi-FOR-Command Results

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

esso

  • Prendi una serie di dati
  • Rendere un parametro FOR %%Guguale a una parte di tali dati
  • Eseguire un comando (facoltativamente utilizzando il parametro come parte del comando).
  • -> Ripeti per ogni elemento di dati

Se si utilizza il comando FOR dalla riga di comando anziché in un programma batch, utilizzare solo un segno di percentuale: %Ganziché %%G.

Parametri FOR

  • Il primo parametro deve essere definito utilizzando un singolo carattere, ad esempio la lettera G.

  • FOR %%G IN ...

    In ogni iterazione di un ciclo FOR, la IN ( ....)clausola viene valutata e %%Gimpostata su un valore diverso

    Se questa clausola genera un singolo valore, %% G viene impostato uguale a quel valore e il comando viene eseguito.

    Se la clausola risulta in più valori, vengono definiti implicitamente parametri aggiuntivi per contenere ciascuno. Questi sono assegnati automaticamente in ordine alfabetico %%H %%I %%J... (definizione di parametro implicita)

    Se il parametro fa riferimento a un file, è possibile utilizzare il riferimento di variabile avanzato per estrarre il nome file / percorso / data / dimensione.

    Puoi ovviamente scegliere qualsiasi lettera dell'alfabeto diversa da %%G. ma è una buona scelta perché non è in conflitto con nessuna delle lettere del formato del percorso (a, d, f, n, p, s, t, x) e fornisce la sequenza più lunga di lettere non in conflitto da utilizzare come parametri impliciti .


1
Come posso usare il loop per entrare in una variabile precedentemente impostata? Ho provato per / F "token = 2 delims =," %% i in (% a%) do (… .. ma questo non funziona. Non riesce a dire "(era inaspettato in questo momento"
Shivani

Ciao. Sta %a%dando il nome di un file normale? È difficile aiutarti con questo formato. Sentiti libero di porre una nuova domanda dopo aver letto Come chiedere .
J. Chomel,

2
@jumping_monkey, Il comando FOR crea variabili di parametro che vengono identificate con una lettera anziché con un numero (ad es. %% G). Il formato del percorso Parameter Expansions può essere applicato anche a questi. Per evitare confusione tra i due gruppi di lettere, evitare di usare le lettere (a, d, f, n, p, s, t, x, z) come parametri FOR o semplicemente scegliere una lettera di parametro FOR che è maiuscola.
J. Chomel,

Ciao @ J.Chomel, So for example in a reference like %%~fG the %%G is the FOR parameter, and the ~f is the Parameter Expansion.capito (qui) [ ss64.com/nt/syntax-args.html ), grazie a te. Saluti amico.
jumping_monkey il

15

FOR ti fornirà tutte le informazioni di cui avrai mai bisogno sui loop FOR, inclusi esempi sull'uso corretto.


13

Prova questo codice:

@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

num1è il numero da incrementare ed num2è il valore aggiunto a num1e terminatore è il valore dove num1finirà. È possibile indicare un valore diverso per terminator in questa istruzione ( if %num1%==%terminator% goto close). Questa è l'espressione booleana goto close è il processo se il booleano è vero e goto open è il processo se il booleano è falso.


Questo è il più facile da capire. Le altre risposte non danno quasi alcuna spiegazione su ciò che fanno i comandi e i flag. Per un solo tipo di javascript, i file batch non sono affatto intuitivi.
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

Dal FOR /?documento di aiuto:

FOR% variabile IN (imposta) comando DO [comando-parametri]

% variabile Specifica un parametro sostituibile a lettera singola.
(set) Specifica un set di uno o più file. È possibile utilizzare caratteri jolly. comando Specifica il comando da eseguire per ciascun file.
command-parameter
Specifica i parametri o le opzioni per il comando specificato.

Per utilizzare il comando FOR in un programma batch, specificare la variabile %% anziché la
variabile%. I nomi delle variabili fanno distinzione tra maiuscole e minuscole, quindi% i è diverso
da% I.

Se le estensioni di comando sono abilitate, sono supportate le seguenti
forme aggiuntive del comando FOR:

FOR / D% variabile IN (set) comando DO [comando-parametri]

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

FOR / R [[drive:] percorso]% variabile IN (set) comando DO [comando-parametri]

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% variabile IN (inizio, passaggio, fine) comando DO [parametri-comando]

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)                                     
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.