为什么相等运算符在三个条件下不起作用?
Why does the equality operator not work on three conditions?
所以我一直想做一些非常简单的事情 运行,但我不明白为什么:
@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
标签不起作用。
谁能帮我理解为什么?
不了解批处理,但我可以分享一些其他编程语言的上下文,这通常不起作用。
这可能会解析为:
(%var1% == %var2%) == %var3%
,或
%var1% == (%var2% == %var3%)
.
在任何一种情况下,首先评估两个变量之间的等式之一,导致 false
或 true
可能不等于第三个变量(即使它确实发生了到,那可能不是你想要的)。
解决方案是使用两个单独的等式,结合 AND 运算符,例如 %var1%==%var2% AND %var2%==%var3%
根据if
command(类型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...
)
所以我一直想做一些非常简单的事情 运行,但我不明白为什么:
@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
标签不起作用。
谁能帮我理解为什么?
不了解批处理,但我可以分享一些其他编程语言的上下文,这通常不起作用。
这可能会解析为:
(%var1% == %var2%) == %var3%
,或%var1% == (%var2% == %var3%)
.
在任何一种情况下,首先评估两个变量之间的等式之一,导致 false
或 true
可能不等于第三个变量(即使它确实发生了到,那可能不是你想要的)。
解决方案是使用两个单独的等式,结合 AND 运算符,例如 %var1%==%var2% AND %var2%==%var3%
根据if
command(类型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...
)