Para el conteo de bucles de 1 a n en un script de Windows Bat

25

Necesito ejecutar un comando de Windows n veces dentro de un archivo de script bat. Sé cómo hacer esto en varios lenguajes de programación, pero no puedo hacerlo bien en la línea de comandos de Windows :-(

Esperaría algo como

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

o incluso esto (aunque no del todo en serio)

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

¡Gracias!

EDITAR

Puedo escribir un programa en java, perl, c o lo que sea que genere un script bat que se vea así

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

y así. O mejor":

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

y luego ejecutarlo ... Pero la cosa es que necesito una forma concisa de especificar un rango de números para iterar dentro del script.

¡Gracias!

Raoulsson
fuente
1
Las respuestas aquí son perfectamente buenas, pero por el amor de Dios ... ¿lote? De Verdad? Recomiendo encarecidamente pasar a un idioma más moderno.
EBGreen
No parece que tenga otra opción en el asunto.
wolfgangsz
No he visto nada que implique que no hay otra opción. De hecho, dice que puede escribir en "cualquier idioma", por lo que diría que sin más información parece que tiene otra opción.
EBGreen
Chicos, necesitan implementar código que está escrito en un lenguaje moderno por un guión ...
raoulsson
1
Puede ser o no obligatorio; a veces es la herramienta adecuada para el trabajo. No puede garantizar la instalación de powershell, y mucho menos bash, python, perl, etc. en un servidor Windows XP o 2003. Batch es una solución perfectamente aceptable.
Goyuix

Respuestas:

44

Puedes hacerlo de la misma manera:

ECHO Start of Loop

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

El 1,1,5 se decodifica como:

(start,step,end)

También tenga en cuenta que si está incrustando esto en un archivo por lotes, deberá usar el signo de porcentaje doble (%%) para prefijar sus variables; de lo contrario, el intérprete de comandos intentará evaluar la variable% i antes de ejecutar el ciclo.

Goyuix
fuente
3
"ECHO Start of Loop" se ejecutará en cada paso, no solo en el inicio.
Pausado hasta nuevo aviso.
1
Además, el uso de un @signo suprimirá la impresión de los comandos a medida que se ejecutan desde la línea de comandos. "... DO @ (..."
Pausado hasta nuevo aviso.
Esto funciona solo con / L después de "FOR". ¿Porque eso?
raoulsson
1
¿Para un /? y encontrará: FOR / L% variable IN (inicio, paso, fin) Comando DO [parámetros de comando] El conjunto es una secuencia de números de principio a fin, por cantidad de pasos. Entonces (1,1,5) generaría la secuencia 1 2 3 4 5 y (5, -1,1) generaría la secuencia (5 4 3 2 1)
EBGreen
Es mejor usarlo %%ien su texto y agregar un comentario que sea %ipara ejecución directa en la línea de comando. La mayoría de los usuarios lo probarán en un archivo BAT e intentarán encontrar la razón por la que obtienen un error (como yo).
i486
8

La sintaxis es

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

Buen artículo aquí y especificaciones de XP aquí

Andy
fuente
6

Directamente desde la línea de comando:

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

Usando un archivo por lotes:

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

Muestra:

1
2
3
...
100
fmoraesjr
fuente
¿Qué pasa si la secuencia numérica es 0001 a 00100+, etc.?
nwgat