@echo off
SET var1="Yes"
SET var2="No"
SET var3="Yes"
if %var1%=="Yes"
echo Var1 set
if %var2%=="Yes"
echo Var2 set
if %var3%=="Yes"
echo Var3 set
如果我運行上面的腳本,我得到以下錯誤。任何人都可以幫忙嗎?如果批處理文件中的條件
該命令的語法是 不正確。
謝謝。
@echo off
SET var1="Yes"
SET var2="No"
SET var3="Yes"
if %var1%=="Yes"
echo Var1 set
if %var2%=="Yes"
echo Var2 set
if %var3%=="Yes"
echo Var3 set
如果我運行上面的腳本,我得到以下錯誤。任何人都可以幫忙嗎?如果批處理文件中的條件
該命令的語法是 不正確。
謝謝。
回聲需要或者是在if語句的結束:
if %var1%=="Yes" echo Var1 set
或以下形式:
if %var1%=="Yes" (
echo Var1 set
)
我傾向於使用前者爲很簡單的條件語句和後者用於多命令的和原始的while
陳述:
:while1
if %var1%=="Yes" (
:: Do something that potentially changes var1
goto :while1
)
Wh在你特定的一段代碼中,正在試圖執行命令if %var1%=="Yes"
,這本身無效。
就以IF命令的幫助一看:
C:\Users\Rubens>if /?
Performs conditional processing in batch programs.
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
所以,你,命令必須是相同的,如果行。你的腳本應該是:
@echo off
SET var1="Yes"
SET var2="No"
SET var3="Yes"
if %var1%=="Yes" echo Var1 set
if %var2%=="Yes" echo Var2 set
if %var3%=="Yes" echo Var3 set
你不能把這樣一個換行符在IF
的中間。所以,你可以這樣做:
if %var1%=="Yes" echo Var1 set
或者,如果你想你的語句分佈在多條線路可以使用括號:
if %var1%=="Yes" (
echo Var1 set
)
但是,當你使用括號要小心,因爲變量擴展可能不像您預期的那樣。例如:
set myvar=orange
if 1==1 (
set myvar=apple
echo %myvar%
)
輸出:
orange
這是因爲括號之間的所有內容將被視爲單個語句之間的括號內運行的所有變量之前的任何命令的擴展。您可以解決此使用延遲擴展:
setlocal enabledelayedexpansion
set myvar=orange
if 1==1 (
set myvar=apple
echo !myvar!
)
賢者的忠告。我所有的cmd腳本都以'setlocal enableextensions enabledelayedexpansion'開頭(並以'endlocal'結尾)。 – paxdiablo 2009-12-23 09:41:49
@echo off
setlocal enabledelayedexpansion
set var1=1
set var2=2
set var3=1
if "!var1!" == "1" echo Var1 set
if "!var2!" == "1" echo Var2 set
if "!var3!" == "1" echo Var3 set
pause
謝謝。它是否僅適用於echo或所有隨後的命令作爲if語句的肯定結果? – bdhar 2009-12-23 09:29:27
@bdhar,這就是'if'命令的語法,所以,它們都是,不只是回聲。 – paxdiablo 2009-12-23 09:39:56
+1批處理文件中的while循環。 – 2009-12-23 09:47:38