Per il conteggio dei loop da 1 a n in uno script di Windows Bat


25

Ho bisogno di eseguire un comando windows n volte all'interno di un file di script bat. So come farlo in vari linguaggi di programmazione ma non riesco a farlo direttamente dalla riga di comando di Windows :-(

Mi aspetterei qualcosa del genere

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

o anche questo (anche se non del tutto sul serio)

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

Grazie!

MODIFICARE

Posso scrivere un programma in java, perl, c o qualunque cosa genererà uno script bat simile a questo

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

e così via. O anche "meglio":

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

e poi eseguirlo ... Ma il fatto è che ho bisogno di un modo conciso per specificare un intervallo di numeri da scorrere all'interno dello script.

Grazie!


1
Le risposte qui sono perfettamente buone, ma per l'amore di Dio ... batch? Veramente? Consiglio vivamente di passare a un linguaggio più moderno.
— EBGreen,

Non sembra che abbia una scelta in merito.
— Wolfgangsz,

Non ho visto nulla che implichi che non c'è scelta. È un dato di fatto che dice di poter scrivere in "qualunque" lingua, quindi direi che senza ulteriori informazioni sembra che abbia una scelta.
— EBGreen,

Ragazzi, ho bisogno di distribuire il codice CHE è scritto in un linguaggio moderno DA uno script ...
— raoulsson,

1
Che sia o non sia necessario, a volte è lo strumento giusto per il lavoro. Non è possibile garantire che PowerShell, per non parlare di bash, python, perl, ecc. Sia installato su un server Windows XP o 2003. Il batch è una soluzione perfettamente accettabile.
— Goyuix,

Risposte:


44

Puoi farlo in modo simile in questo modo:

ECHO Start of Loop

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

1,1,5 è decodificato come:

(start,step,end)

Inoltre, se lo si incorpora in un file batch, sarà necessario utilizzare il doppio segno di percentuale (%%) per aggiungere il prefisso alle variabili, altrimenti l'interprete dei comandi proverà a valutare la variabile% i prima di eseguire il ciclo.


3
"ECHO Start of Loop" verrà eseguito ad ogni passaggio, non solo all'inizio.
— In pausa fino a nuovo avviso.

1
Inoltre, l'uso di un @segno sopprimerà la stampa dei comandi mentre vengono eseguiti dalla riga di comando. "... DO @ (..."
— In pausa fino a ulteriore comunicazione.

Funziona solo con / L dopo "FOR". Perché?
— Raoulsson,

1
Fare un For /? e troverai: FOR / L% variabile IN (inizio, passaggio, fine) Comando DO [parametri-comando] L'insieme è una sequenza di numeri dall'inizio alla fine, per quantità di passi. Quindi (1,1,5) genererebbe la sequenza 1 2 3 4 5 e (5, -1,1) genererebbe la sequenza (5 4 3 2 1)
— EBGreen

È meglio usare %%inel testo e aggiungere un commento %iper l'esecuzione diretta dalla riga di comando. La maggior parte degli utenti lo testerà nel file BAT e proverà a trovare il motivo per cui viene visualizzato l'errore (come me).
— i486,

8

La sintassi è

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

Buon articolo qui e specifiche XP qui


6

Direttamente dalla riga di comando:

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

Utilizzando un file batch:

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

Displays:

1
2
3
...
100

cosa succede se la sequenza numerica va da 0001 a 00100+ ecc.?
— nwgat,
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.