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)