for /L %%i in (1, 1, 100) do (
SET VAR=%%i %% 5
set /a CAL=%VAR% %% 5
echo %CAL%
)
大家好,这里是上面的简单代码,我试图获取索引并在每个增量上使用 % 5。
命令行给了我:
SET VAR = 100 % 5
set /a CAL = % 5
Missing operand.
我到底做错了什么?多谢你们
for /L %%i in (1, 1, 100) do (
SET VAR=%%i %% 5
set /a CAL=%VAR% %% 5
echo %CAL%
)
大家好,这里是上面的简单代码,我试图获取索引并在每个增量上使用 % 5。
命令行给了我:
SET VAR = 100 % 5
set /a CAL = % 5
Missing operand.
我到底做错了什么?多谢你们
需要更好地解释您打算做什么。试图从不起作用的代码中找出你想要的东西变成了猜谜游戏。
您应该意识到的第一件事是,您需要使用&
OR 将语句分开,并将它们放在单独的行上,否则右侧的 ENTIRE 表达式将分配给VAR
.
我假设你的意思是
for /L %%i in (1, 1, 100) do (
SET VAR=%%i %% 5
set /a CAL=%VAR% %% 5
echo %CAL%
)
现在我们无法从中看出您真正想要实现的目标。也许您想设置val
为表达式的值%%i %% 5
您需要/A
开关
for /L %%i in (1, 1, 100) do (
SET /A VAR=%%i %% 5
set /a CAL=%VAR% %% 5
echo %CAL%
)
现在 - 下一行,您是否尝试设置CAL
为 的值%VAR% %% 5
?好吧 - 有几个问题 - 首先,VAR
将是 0..4,因此无论如何设置CAL
为0。VAR %% 5
CAL
第二个问题更重要,并延伸到下一行。
FOR 循环从 FOR 到结束括号进行解析。在 PARSE-TIME,any%var%
被变量的 THEN-CURRENT 值替换。然后执行代码。
由于在 PARSE 时既没有var
也没有cal
设置,所以将执行的是
for /L %%i in (1, 1, 100) do (
SET /A VAR=%%i %% 5
set /a CAL= %% 5
echo
)
所以你会SET CAL
在线路上得到一个“缺少操作数”的错误,并ECHO
会及时报告“Echo is OFF”(或视情况而定)。
要克服这些问题,您需要添加一些更改...
SETLOCAL ENABLEDELAYEDEXPANSION
for /L %%i in (1, 1, 100) do (
SET /A VAR=%%i %% 5
set /a CAL=!VAR! %% 3
echo !VAR! !CAL!
)
请注意,SETLOCAL ENABLEDELAYEDEXPANSION
它建立了一种模式,该模式%var%
仍然返回 PARSE-TIME 值,但!val!
返回 RUN-TIME 值 - 随着它的变化。由于VAR
将在 0 和 4 之间变化,我已经更改了计算以允许看到更改,并且CAL
ECHO 报告了var
cal
以下两个代码导致相同的结果。第一个使用 DelayedExpansion 并且速度更快,第二个没有VAR
:
@echo off &setlocal enabledelayedexpansion
for /L %%i in (1, 1, 100) do (
SET /a VAR=%%i %% 5
set /a CAL=!VAR! %% 5
echo !CAL!
)
.
@echo off &setlocal
for /L %%i in (1, 1, 100) do (
set /a CAL="(%%i%%5)%%5"
call echo %%CAL%%
)