Я хочу написать следующий код в командном файле. Как я могу это сделать?
for (i=0; i<100; i++)
{
rem = i % 10;
if(rem == 0)
{
// ECHO something
}
else
{
ECHO i
}
}
Я хочу написать следующий код в командном файле. Как я могу это сделать?
for (i=0; i<100; i++)
{
rem = i % 10;
if(rem == 0)
{
// ECHO something
}
else
{
ECHO i
}
}
Это довольно сложно из-за того, как расширение переменных в циклах работает в пакетных файлах. Пакетные файлы имеют свои собственные 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
в 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
Обратите внимание, что rem
- это команда для запуска комментария, поэтому использование rem
в скрипте может привести к нежелательному поведению.
Цикл может быть упрощен с помощью for /l
но теперь вам нужно включить отложенное расширение, потому что весь текст for
анализируется сразу