Batch file Batch SetLocal EnableDelayedExpansion和数学问题

Batch file Batch SetLocal EnableDelayedExpansion和数学问题,batch-file,if-statement,math,cmd,Batch File,If Statement,Math,Cmd,我希望看到最后的结果(可能还有其他一些结果)显示很好,但没有!我想这是因为SetLocal EnableDelayedExpansion是一个错误,但我需要在代码中使用它。那么,如何使用SetLocal EnableDelayedExpansion获得预期结果呢。感谢您提供的帮助=)setlocal EnableDelayedExpansion仅在批处理文件中工作(另请参见setlocal/?),在命令提示符中键入时无效;因此,扩展不起作用 要在命令提示符下使用延迟扩展,您需要打开一个新的cmd

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

setlocal EnableDelayedExpansion仅在批处理文件中工作(另请参见
setlocal/?
),在命令提示符中键入时无效;因此,
扩展不起作用

要在命令提示符下使用延迟扩展,您需要打开一个新的
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

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

cmd /V:ON

您是否在命令提示符中键入所有这些行??在这种情况下,
setlocal EnableDelayedExpansion
无效,
扩展将不起作用;您需要打开一个新的
cmd
实例以启用延迟扩展:
cmd/V:ON
此外,您应该使用比较运算符
eq
进行数值操作,因为
=
强制进行字符串比较……是的,我在命令提示符中键入了所有这些运算符。是的,在我在批处理文件中尝试后,它成功了!我还要试着用EQU。谢谢:):)你说“
==
强制字符串比较”是什么意思?数值比较仅在较大/较小比较时才有意义。如果两个值相等/不同,则将它们视为数字或字符串并不重要!我同意,
=
eq
给出相同的结果;我只是想指出,它们的行为并不完全相同……对不起。如果
=
eq
的行为不完全相同,那么两者的区别是什么?你能发布任何代码来显示这种差异吗?@Aacini就是一个例子;这一个:
如果1 eq 01
的计算结果为True,其中
如果1==01
为False…确定。尽管这涉及到不同的概念(因为两个值都是不同的基于数字的,不会由相同的操作生成),但我必须承认您是对的:
if 18 eq 0x12 echo True
set /A Number1=3+9
set /A i=9+3
if !Number1! EQU %i% (echo Good) else (echo Bad)