Как я могу написать команду пакетного файла Windows с циклом и оператором%?

Я хочу написать следующий код в командном файле. Как я могу это сделать?

for (i=0; i<100; i++)
{
   rem = i % 10;
   if(rem == 0)
   {
     // ECHO something
   }
   else
   {
     ECHO i         
   }
}

2 ответа

Решение

Это довольно сложно из-за того, как расширение переменных в циклах работает в пакетных файлах. Пакетные файлы имеют свои for строить; не нужно возиться с goto с. %% является оператором по модулю в пакетных файлах, как % зарезервировано для раскрытия переменных.

Этот код работает для меня:

@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

По модулю можно сделать с set /a, Петли могут быть сделаны с goto так же, как вы конвертируете те for петли в goto в С

@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

Заметить, что rem это команда для запуска комментария, поэтому с помощью rem в скрипте может привести к нежелательному поведению

Цикл может быть упрощен с for /l но теперь вы должны включить отложенное расширение, потому что все тело for разбирается сразу

Другие вопросы по тегам