所以我一直想做一些非常简单的事情,却遇到了这个问题,我不明白为什么:
@echo off
setlocal enabledelayedexpansion
set /a var1=10
set /a var2=10
set /a var3=10
:test1
if %var1%==%var2% (
if %var2%==%var3% (
echo This Works
pause
)
)
:test2
if %var1%==%var2%==%var3% (
echo But this does not
pause
)
在这种情况下,test1
标签工作得很好,但test2
标签不工作。
有人能帮我理解为什么吗?
根据if
命令(类型为if /?
(的帮助,您只能比较两个表达式,而不能比较三个。
然而,您可以连接多个比较:
if %var1% equ %var2% if %var2% equ %var3% (
rem // Do something...
)
这是以下内容的缩写(一旦您想使用else
子句,它就变得特别重要(:
if %var1% equ %var2% (
if %var2% equ %var3% (
rem // Do something...
)
)
在上面的中,我使用了equ
运算符而不是==
,因为您正在比较整数。如果要比较字符串,请使用==
和引号(以避免空字符串问题并保护特殊字符(:
if "%var1%"=="%var2%" if "%var2%"=="%var3%" (
rem // Do something...
)
不了解批处理,但我可以共享其他一些编程语言的上下文,这些语言通常不起作用。
这可能解析为:
(%var1% == %var2%) == %var3%
,或- CCD_ 10
在任何一种情况下,都会首先计算两个变量之间的等式之一,从而产生可能不等于第三个变量的false
或true
(即使发生这种情况,也可能不是您想要的(。
解决方案是使用两个独立的等式,与AND运算符结合,如%var1%==%var2% AND %var2%==%var3%