所以我一直想做一些非常簡單的事情并遇到了這個,我不明白為什么:
@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標簽不起作用。
誰能幫我理解為什么?
uj5u.com熱心網友回復:
根據if命令(type 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...
)
uj5u.com熱心網友回復:
不了解批處理,但我可以從其他一些通常不起作用的編程語言中共享背景關系。
這可能會決議為:
(%var1% == %var2%) == %var3%, 或者%var1% == (%var2% == %var3%).
在任何一種情況下,首先評估兩個變數之間的一個相等性,導致 a falseortrue可能不等于第三個變數(即使它確實發生了,這可能不是你想要的)。
解決方案是使用兩個單獨的等式,并與 AND 運算子結合使用,例如 %var1%==%var2% AND %var2%==%var3%
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/408680.html
標籤:
