我试图通过批处理文件将两个变量相乘。代码是:
SETLOCAL ENABLEDELAYEDEXPANSION
@ECHO OFF
SET /A res = 0
FOR /L %%i IN (1,1,2) DO (
FOR /L %%j IN (1,1,3) DO (
SET /A res = %%i * %%j
ECHO Multiplying %%i and %%j
ECHO %res%
)
)
问题是我总是得到0。谁能告诉我我做错了什么?
这是输出:
Multiplying 1 and 1
0
Multiplying 1 and 2
0
Multiplying 1 and 3
0
Multiplying 2 and 1
0
Multiplying 2 and 2
0
Multiplying 2 and 3
0
谢谢!
答案 0 :(得分:2)
这是因为您在设置它的同一个块中输出结果。阅读有关延迟扩展的help set
。当{em>解析命令时,cmd
会扩展%variables%
,这比执行时要早得多。作为副作用,您的%res%
将替换为零。
你需要
setlocal enabledelayedexpansion
一开始,然后使用!res!
代替%res%
。
旁注:放弃=
来电中set
周围的空格。 1}}使用它们时可以正常工作,但不会这样做。
答案 1 :(得分:1)
你需要使用!由于您的延迟扩展设置而扩展变量:
SETLOCAL ENABLEDELAYEDEXPANSION
@ECHO OFF
SET res = 0
FOR /L %%i IN (1,1,2) DO (
FOR /L %%j IN (1,1,3) DO (
SET /A res = %%i * %%j
ECHO Multiplying %%i and %%j
ECHO !res!
)
)