2009-12-23 41 views
14
@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 

如果我運行上面的腳本,我得到以下錯誤。任何人都可以幫忙嗎?如果批處理文件中的條件

該命令的語法是 不正確。

謝謝。

回答

23

回聲需要或者是在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",這本身無效。

+0

謝謝。它是否僅適用於echo或所有隨後的命令作爲if語句的肯定結果? – bdhar 2009-12-23 09:29:27

+0

@bdhar,這就是'if'命令的語法,所以,它們都是,不只是回聲。 – paxdiablo 2009-12-23 09:39:56

+1

+1批處理文件中的while循環。 – 2009-12-23 09:47:38

3

就以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 
8

你不能把這樣一個換行符在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! 
) 
+1

賢者的忠告。我所有的cmd腳本都以'setlocal enableextensions enabledelayedexpansion'開頭(並以'endlocal'結尾)。 – paxdiablo 2009-12-23 09:41:49

1
@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