Como você executa um loop em um arquivo em lotes do Windows?

170

Qual é a sintaxe para um loop FOR em um arquivo em lotes do Windows?

Pradeep
fonte

Respostas:

128
FOR %%A IN (list) DO command parameters

list é uma lista de quaisquer elementos, separados por espaços, vírgulas ou ponto e vírgula.

comando pode ser qualquer comando interno ou externo, arquivo em lote ou mesmo - no OS / 2 e NT - uma lista de comandos

parâmetros contém os parâmetros de linha de comando para o comando. Neste exemplo, o comando será executado uma vez para cada elemento da lista, usando parâmetros, se especificado.

Um tipo especial de parâmetro (ou comando uniforme) é %% A, que será substituído por cada elemento da lista consecutivamente.

Dos loops FOR

rahul
fonte
3
Posso indicar o intervalo (1 a 100) na lista?
Pradeep
36
FOR /L %x IN (1,1,100) DO ...
3128 Joey
colocar parênteses em torno de [ parameters ]se você gostaria de incluir várias linhas em seu forciclo
Frank Bryce
1
@aaiezza, eu apóio sua opinião. Estou lutando com esses laços sangrentos agora, trabalhando completamente inesperadamente, e não tenho idéia do que está controlando alguma coisa que esteja olhando para a saída. Coisas horríveis. Útil, mas horrível.
RockDoctor 19/08/19
224

Se você quiser fazer algo x vezes, faça o seguinte:

Exemplo (x = 200):

FOR /L %%A IN (1,1,200) DO (
  ECHO %%A
)

1,1,200 significa:

  • Iniciar = 1
  • Incremento por etapa = 1
  • Fim = 200
vancoeverden
fonte
17
Obrigado por adicionar. Pode ser mais claro se você alterar o valor inicial no seu exemplo para algo diferente do incremento.
Warren Stevens
7
O valor final é inclusivo.
Roland Pihlakas
54

Tipo:

for /?

e você receberá várias páginas de texto de ajuda.

Greg Hewgill
fonte
8
Eu prefiro isso à resposta aceita, pois lida com as diferentes versões do DOS / Windows. "For" foi aprimorado de maneira bastante significativa ao longo dos anos, e a pergunta não diz que versão (s) está sendo direcionada nem qual cenário está sendo tentado.
Mattias Andersson
34

Condicionalmente, execute um comando várias vezes.

  • sintaxe-para-arquivos

    FOR %%parameter IN (set) DO command 
    
  • sintaxe-FOR-Files-Rooted at Path

    FOR /R [[drive:]path] %%parameter IN (set) DO command 
    
  • sintaxe-para-pastas

    FOR /D %%parameter IN (folder_set) DO command 
    
  • sintaxe-FOR-Lista de números

    FOR /L %%parameter IN (start,step,end) DO command 
    
  • sintaxe para o conteúdo do arquivo

    FOR /F ["options"] %%parameter IN (filenameset) DO command 
    

    ou

    FOR /F ["options"] %%parameter IN ("Text string to process") DO command
    
  • Resultados da sintaxe-para-comando

    FOR /F ["options"] %%parameter IN ('command to process') DO command
    

isto

  • Pegue um conjunto de dados
  • Tornar um parâmetro FOR %%Gigual a uma parte desses dados
  • Execute um comando (opcionalmente, usando o parâmetro como parte do comando).
  • -> Repita para cada item de dados

Se você estiver usando o comando FOR na linha de comando, e não em um programa em lote, use apenas um sinal de porcentagem: em %Gvez de %%G.

Parâmetros FOR

  • O primeiro parâmetro deve ser definido usando um único caractere, por exemplo, a letra G.

  • FOR %%G IN ...

    Em cada iteração de um loop FOR, a IN ( ....)cláusula é avaliada e %%Gconfigurada com um valor diferente

    Se esta cláusula resultar em um único valor, %% G será definido igual a esse valor e o comando será executado.

    Se a cláusula resultar em vários valores, parâmetros extras são implicitamente definidos para conter cada um. Eles são atribuídos automaticamente em ordem alfabética %%H %%I %%J... (definição implícita de parâmetros)

    Se o parâmetro se referir a um arquivo, a referência de variável aprimorada poderá ser usada para extrair o nome do arquivo / caminho / data / tamanho.

    Obviamente, você pode escolher qualquer letra do alfabeto que não seja %%G. mas é uma boa opção, pois não entra em conflito com nenhuma das letras no formato do nome do caminho (a, d, f, n, p, s, t, x) e fornece a execução mais longa de letras não conflitantes para uso como parâmetros implícitos .

J. Chomel
fonte
1
Como uso o loop for para acessar uma variável definida anteriormente? Eu tentei para / F "tokens = 2 delims =," %% i em (% a%) do (... .. mas isso não funciona. Falha ao dizer "(era inesperado neste momento")
Shivani em
Olá. Está %a%dando o nome de um arquivo regular? É difícil ajudá-lo com este formato. Sinta-se à vontade para fazer uma nova pergunta depois de ler Como fazer .
J. Chomel
2
@jumping_monkey, O comando FOR cria variáveis ​​de parâmetro que são identificadas com uma letra em vez de um número (por exemplo, %% G). O formato do caminho Expansões de parâmetros também pode ser aplicado. Para evitar confusão entre os dois conjuntos de letras, evite usar as letras (a, d, f, n, p, s, t, x, z) como parâmetros FOR ou apenas escolha uma letra de parâmetro FOR que seja maiúscula.
J. Chomel
Oi @ J.Chomel, So for example in a reference like %%~fG the %%G is the FOR parameter, and the ~f is the Parameter Expansion.Entendi (aqui) [ ss64.com/nt/syntax-args.html ), graças a você. Saúde, companheiro.
jumping_monkey 10/03
15

FOR fornecerá todas as informações necessárias sobre os loops FOR, incluindo exemplos de uso adequado.

Mechaflash
fonte
13

Tente este código:

@echo off
color 02
set num1=0
set num2=1 
set terminator=5
:loop
set /a num1= %num1% + %num2%
if %num1%==%terminator% goto close
goto open
:close
echo %num1%
pause 
exit
:open
echo %num1%
goto loop

num1é o número a ser incrementado e num2é o valor adicionado a num1e terminator é o valor em que o num1final será. Você pode indicar um valor diferente para o terminador nesta declaração ( if %num1%==%terminator% goto close). Essa é a expressão booleana goto close é o processo se o booleano for true e goto open é o processo se o boolean for false.

Marlon Ampoon
fonte
Este é o mais fácil de entender. As outras respostas não dão quase nenhuma explicação sobre o que os comandos e sinalizadores fazem. Para um tipo apenas de javascript, os arquivos em lotes não são intuitivos.
1934286 07/03/19
5
@echo off
echo.
set /p num1=Enter Prelim:
echo.
set /p num2=Enter Midterm:
echo.
set /p num3=Enter Semi:
echo.
set /p num4=Enter Finals:
echo.
set /a ans=%num1%+%num2%+%num3%+%num4%
set /a avg=%ans%/4
ECHO %avg%
if %avg%>=`95` goto true
:true
echo The two numbers you entered were the same.
echo.
pause
exit
Rendell tanyag
fonte
5

Do FOR /?documento de ajuda:

FOR% variável IN (conjunto) comando DO [parâmetros de comando]

% variável Especifica um parâmetro substituível de uma única letra.
(conjunto) Especifica um conjunto de um ou mais arquivos. Curingas podem ser usados. comando Especifica o comando a ser executado para cada arquivo.
command-parameters
Especifica parâmetros ou opções para o comando especificado.

Para usar o comando FOR em um programa em lote, especifique %% variável em vez
de% variável. Os nomes das variáveis ​​diferenciam maiúsculas de minúsculas; portanto,% i é diferente
de% I.

Se as extensões de comando estiverem ativadas, os seguintes
formulários adicionais do comando FOR serão suportados:

Variável FOR / D% comando IN (conjunto) DO [parâmetros de comando]

If set contains wildcards, then specifies to match against directory  
names instead of file names.                                          

FOR / R [[drive:] caminho]% variável IN (conjunto) comando DO [parâmetros de comando]

Walks the directory tree rooted at [drive:]path, executing the FOR    
statement in each directory of the tree.  If no directory             
specification is specified after /R then the current directory is     
assumed.  If set is just a single period (.) character then it        
will just enumerate the directory tree.                               

FOR / L% variável IN (início, etapa, fim) Comando DO [parâmetros de comando]

The set is a sequence of numbers from start to end, by step amount.   
So (1,1,5) would generate the sequence 1 2 3 4 5 and (5,-1,1) would   
generate the sequence (5 4 3 2 1)                                     
Kangaroo.H
fonte