Para contagem de loop de 1 a n em um script bat do windows

25

Eu preciso executar um comando do Windows n vezes dentro de um arquivo de script bat. Eu sei como fazer isso em várias linguagens de programação, mas não consigo acertar na linha de comando do Windows :-(

Eu esperaria algo como

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

ou mesmo isso (embora não seja totalmente sério)

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

Obrigado!

EDITAR

Eu posso escrever um programa em java, perl, c ou o que quer que gere um script bat que se parece com isso

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

e assim por diante. Ou ainda "melhor":

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 depois executá-lo ... Mas o problema é que preciso de uma maneira concisa de especificar um intervalo de números para iterar no script.

Obrigado!

raoulsson
fonte
11
As respostas aqui são perfeitamente boas, mas pelo amor de Deus ... lote? Sério? Eu recomendo mudar para uma linguagem mais moderna.
EBGreen
Não parece que ele tenha uma escolha no assunto.
26909 wolfgangsz
Não vi nada que implique que não haja escolha. Por uma questão de fato, ele diz que pode escrever na linguagem "seja qual for", então eu diria que, sem mais informações, parece que ele tem uma escolha.
EBGreen
Gente, eu preciso implantar código que é escrito em uma linguagem moderna por um script ...
raoulsson
11
Pode ou não é necessário - às vezes é a ferramenta certa para o trabalho. Você não pode garantir que o powershell, muito menos o bash, python, perl etc. sejam instalados em uma caixa de servidor Windows XP ou 2003. Lote é uma solução perfeitamente aceitável.
Goyuix

Respostas:

44

Você pode fazer o mesmo da seguinte maneira:

ECHO Start of Loop

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

O 1,1,5 é decodificado como:

(start,step,end)

Observe também que, se você incorporar isso em um arquivo em lotes, será necessário usar o sinal de porcentagem duplo (%%) para prefixar suas variáveis; caso contrário, o interpretador de comandos tentará avaliar a variável% i antes de executar o loop.

Goyuix
fonte
3
O "ECHO Start of Loop" será executado em cada etapa, não apenas no início.
Pausado até novo aviso.
11
Além disso, o uso de um @sinal suprimirá a impressão dos comandos conforme eles são executados na linha de comando. "... DO @ (..."
pausado até novo aviso.
Isso funciona apenas com o / L após o "FOR". Por que isso?
raoulsson
11
Faça um For /? e você encontrará: FOR / L% variável IN (início, etapa, fim) Comando DO [comando-parâmetros] O conjunto é uma sequência de números do início ao fim, pelo valor da etapa. Então, (1,1,5) iria gerar a sequência 1 2 3 4 5 e (5, -1,1) iria gerar a sequência (5 4 3 2 1)
EBGreen
É melhor usar %%ino seu texto e adicionar um comentário que seja %ipara execução direta na linha de comando. A maioria dos usuários irá testá-lo no arquivo BAT e tentar encontrar o motivo pelo qual eles obtêm erros (como eu).
I486
8

A sintaxe é

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

Bom artigo aqui e detalhes do XP aqui

Andy
fonte
6

Diretamente da linha de comando:

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

Usando um arquivo em lotes:

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

Exibe:

1
2
3
...
100
fmoraesjr
fonte
e se a sequência numérica for 0001 a 00100+ etc.?
nwgat