为什么相等运算符不能在三个条件下工作



所以我一直想做一些非常简单的事情,却遇到了这个问题,我不明白为什么:

@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

在任何一种情况下,都会首先计算两个变量之间的等式之一,从而产生可能不等于第三个变量的falsetrue(即使发生这种情况,也可能不是您想要的(。

解决方案是使用两个独立的等式,与AND运算符结合,如%var1%==%var2% AND %var2%==%var3%

相关内容

  • 没有找到相关文章