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.