Preciso executar um comando de 100 a 200 vezes e, até agora, minha pesquisa indica que eu teria que copiar / colar 100 cópias desse comando, OU usar um for
loop, mas o for
loop espera uma lista de itens, portanto, eu precisaria 200 arquivos para operar ou uma lista de 200 itens, derrotando o ponto.
Eu preferiria não ter que escrever um programa em C e percorrer toda a documentação porque eu tive que escrever outro programa para executar meu programa para fins de teste. A modificação do meu programa em si também não é uma opção.
Então, dado um comando, a
como eu o executaria por N
meio de um script em lote?
Nota: eu não quero um loop infinito
Por exemplo, aqui está como seria em Javascript:
var i;
for (i = 0; i < 100; i++) {
console.log( i );
}
Como seria um script em lote em execução no Windows?
windows
loops
batch-file
Tom J Nowell
fonte
fonte
Respostas:
for /l
é seu amigo:Começa em 1, passos por um e termina em 100.
Use dois
%
s se estiver em um arquivo em lotes(que é uma das coisas que eu realmente odeio nos scripts do Windows)
Se você tiver vários comandos para cada iteração do loop, faça o seguinte:
ou em um arquivo em lotes
Chave:
/l
indica que ofor
comando operará de maneira numérica, em vez de operar em um conjunto de arquivos%x
é a variável de loops(valor inicial, incremento de valor, condição final [inclusive])
fonte
%x
é a variável do loop,/l
(not\l
) significa que o comando for irá operar de maneira numérica, em vez de operar em um conjunto de arquivos.for /l %x in (1, 1, 100) do echo %x
recebo "x não esperado".E para iterar nos arquivos de um diretório:
Você deve usar "enableDelayedExpansion" e! FILENAME! em vez de $ FILENAME $. No segundo caso, o DOS interpretará a variável apenas uma vez (antes de entrar no loop) e não sempre que o programa fizer um loop.
fonte
Modelo para um loop simples, mas contado:
Exemplo: Diga "Olá, mundo!" 5 vezes:
Este exemplo produzirá:
fonte
set /p loopcount="How many loops? "
para que você possa executá-lo com a entrada do usuário. É mais prático.Você também pode tentar isso em vez de um
for
loop:É bem pequeno e é o que eu uso o tempo todo.
fonte
Ou você pode diminuir / incrementar uma variável pelo número de vezes que deseja fazer um loop:
Obviamente, usar
FOR /L
é a estrada e essa é a rua que leva mais tempo, mas chega ao mesmo destino.fonte
Você pode fazer algo no seguinte efeito, evitando o loop FOR.
fonte
Você pode fazer isso sem uma
for
declaração ^. ^:Tem entendimento básico. Apenas faça um teste. : P
fonte
Maneira muito básica de implementar loop na programação cmd usando rótulos
fonte
O DOS não oferece mecanismos muito elegantes para isso, mas acho que você ainda pode codificar um loop para 100 ou 200 iterações com esforço razoável. Embora não haja um
for
loop numérico , você pode usar uma cadeia de caracteres como uma "variável de loop".Codifique o loop usando GOTO e, para cada iteração,
SET X=%X%@
adicione outro@
sinal a uma variável de ambiente X; e para sair do loop, compare o valor de X com uma sequência de 100 (ou 200)@
sinais.Eu nunca disse que isso era elegante, mas deveria funcionar!
fonte
/a
opção doSET
comando avaliará uma expressão numérica para o valor do lado direito. Veja a duplicação para SET . Não é necessário executar o truque de concatenação.set /a
no DOS. Felizmente o qeustion é paracmd
... (no momento desta resposta, o título pergunta era "DOS loop de script em lotes"Não tenho certeza se uma resposta como essa já foi enviada ainda, mas você pode tentar algo como isto:
A variável% var% aumentará em um até atingir 100, onde o programa emitirá a conclusão de execução. Novamente, não tenho certeza se isso foi enviado ou algo parecido, mas acho que pode ser o mais compacto.
fonte
Eu uso isso. É quase a mesma coisa que as outras, mas é apenas outra maneira de escrevê-lo.
fonte
A resposta realmente depende de como você está familiarizado com o lote, se você não tem tanta experiência, eu recomendaria incrementar uma variável de loop:
Mas se você tem mais experiência com lotes, eu recomendaria o mais prático
for /l %loop in (1, 1, 10) do echo %loop
é a melhor escolha.fonte
Aqui está um script de modelo que vou usar.
O que isso faz é que, quando é iniciado, ele desativa o eco e, em seguida, executa o "Loop", mas nesse local continua o "Loop" (espero que isso ajude.)
fonte
um loop completamente sem falhas
você pode editá-lo alterando 10 na linha 5 para qualquer número para representar quantas vezes deseja que ele faça um loop.
fonte
(EDITADO) Eu fiz isso para que parasse depois de 100 vezes
Isso irá gerar 4 números aleatórios a cada 1 segundo 100 vezes. Retire o "timeout 1 / nobreak> nul" para torná-lo super rápido.
fonte
Provavelmente use goto como
Isso faz um loop inf (infinito).
fonte
infinite
é um pouco maior que o solicitado100-200 times
, então isso não responde à pergunta.Eu tenho 2 respostas Métodos 1: Inserir Javascript no lote
(Eu não sei muito sobre JavaScript)
Método 2: loop no lote
(Obrigado FluorescentGreen5)
fonte