Como posso escrever o comando do arquivo de lote do windows com o loop e o operador%?

5

Eu quero escrever o seguinte código em um arquivo em lotes. Como posso fazer isso?

for (i=0; i<100; i++)
{
   rem = i % 10;
   if(rem == 0)
   {
     // ECHO something
   }
   else
   {
     ECHO i         
   }
}
    
por Bobs 10.06.2017 / 11:18

2 respostas

10

É bastante complicado, devido à forma como a expansão de variáveis em loops funciona em arquivos em lote. Os arquivos em lote têm sua própria for construct; não é necessário mexer com goto s . %% é o operador de módulo em arquivos em lote, pois % é reservado para expansão de variáveis.

Esse código funciona para mim:

@echo off
setlocal enabledelayedexpansion
for /l %%i in (0,1,99) do (
  set /a remainder = %%i %% 10
  if !remainder! == 0 (
    echo something
  ) else (
    echo %%i
  )
)
endlocal
    
por 10.06.2017 / 12:04
2

O módulo pode ser feito com set /a . Os loops podem ser feitos com goto , assim como você converte os for loops em goto em C

@echo off
set "i=0"
:loop
if %i% equ 100 goto :endfor
set /a "mod=i %% 10"
if %mod% equ 0 (
    echo something %mod%
) else (
    echo %i%
)
set /a "i+=1"
goto :loop
:endfor

Observe que rem é um comando para iniciar um comentário, portanto, usar rem no script pode resultar em comportamento indesejado

O loop pode ser simplificado com for /l mas agora você precisa Ativar expansão atrasada porque todo o corpo de for é analisado de uma só vez

    
por 10.06.2017 / 12:05