批处理文件中的变量乘法

时间:2014-02-24 11:05:19

标签: batch-file

我试图通过批处理文件将两个变量相乘。代码是:

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

谢谢!

2 个答案:

答案 0 :(得分:2)

这是因为您在设置它的同一个块中输出结果。阅读有关延迟扩展的help set。当{em>解析命令时,cmd会扩展%variables%,这比执行时要早得多。作为副作用,您的%res%将替换为零。

你需要

setlocal enabledelayedexpansion

一开始,然后使用!res!代替%res%

旁注:放弃=来电中set周围的空格。

答案 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!
    )
)