Batch SetLocal EnableDelayedExpansion和Math问题

时间:2015-10-18 14:17:25

标签: batch-file if-statement math cmd

C:\WINDOWS\system32>SetLocal EnableDelayedExpansion
C:\WINDOWS\system32>set/a Number1=3+9
12
C:\WINDOWS\system32>if !Number1!==9+3 (echo Good) else (echo Bad)
Bad
C:\WINDOWS\system32>if !Number1!==3+9 (echo Good) else (echo Bad)
Bad
C:\WINDOWS\system32>set/a i=9+3
12
C:\WINDOWS\system32>if !Number1!==%i% (echo Good) else (echo Bad)
Bad

我希望看到最后的结果(可能还有其他一些)显示Good但结果却没有!我认为这是因为SetLocal EnableDelayedExpansion是一个错误,但我需要在我的代码中。那么如何使用SetLocal EnableDelayedExpansion获得我期望的结果。感谢您提供的任何帮助=)

1 个答案:

答案 0 :(得分:2)

setlocal EnableDelayedExpansion仅适用于批处理文件(另请参阅setlocal /?),在输入命令提示符时无效;因此!!扩展不起作用。

要在命令提示符中使用延迟扩展,您需要打开一个新的cmd实例:

cmd /V:ON

您不能直接在if语句的比较表达式中进行算术运算,您需要提前进行所有计算。
此外,您应该使用比较运算符EQU进行数值运算,因为==强制进行字符串比较:

set /A Number1=3+9
set /A i=9+3
if !Number1! EQU %i% (echo Good) else (echo Bad)