2009-12-23 8 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 

Wenn ich das obige Skript ausführen, erhalte ich den folgenden Fehler. Kann mir jemand helfen?Wenn Bedingung in Batch-Dateien

Die Syntax des Befehls ist falsch.

Danke.

Antwort

23

Das Echo muss entweder am Ende der if-Anweisung sein:

if %var1%=="Yes" echo Var1 set 

oder der folgenden Form:

if %var1%=="Yes" (
    echo Var1 set 
) 

Ich neige dazu, die ehemaligen für sehr einfache Bedingungen zu nutzen und die letztere für Multi-Befehl Einsen und primitive while Aussagen:

:while1 
    if %var1%=="Yes" (
     :: Do something that potentially changes var1 
     goto :while1 
    ) 

Wh an Ihrem bestimmten Stück Code versucht, den Befehl if %var1%=="Yes" auszuführen, der an und für sich nicht gültig ist.

+0

Dank. Gilt es nur für Echo oder für alle folgenden Befehle als positives Ergebnis für if-Anweisung? – bdhar

+0

@bdhar, das ist die Syntax für den 'if' Befehl ja, ja, alle von ihnen, nicht nur echo. – paxdiablo

+1

+1 für eine While-Schleife in Batch-Datei. –

3

Werfen Sie einen Blick auf IF Befehl help:

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 

muss also, wenn Linie in gleichen sein, sie gebieten. Ihr Skript sollte sein:

@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

Sie nicht eine neue Zeile wie das in der Mitte der IF setzen. So könnten Sie dies tun:

if %var1%=="Yes" echo Var1 set 

Oder, wenn Sie Ihre Aussagen über mehrere Zeilen verteilt haben möchten, können Sie Klammern verwenden:

if %var1%=="Yes" (
    echo Var1 set 
) 

Wenn jedoch Sie verwenden Klammern vorsichtig sein, denn variable Die Erweiterung verhält sich möglicherweise nicht wie erwartet. Zum Beispiel:

set myvar=orange 

if 1==1 (
    set myvar=apple 
    echo %myvar% 
) 

Ausgänge:

orange 

Dies liegt daran, alles zwischen den Klammern als eine einzige Anweisung behandelt wird und alle Variablen werden, bevor eine der Befehl erweitert zwischen den Klammern ausgeführt werden. Sie können diese mit verzögerten Expansion arbeiten:

setlocal enabledelayedexpansion 
set myvar=orange 

if 1==1 (
    set myvar=apple 
    echo !myvar! 
) 
+1

Salbei Beratung. ALLE meine cmd-Skripte beginnen mit 'setlocal enableextensions enabledelayedexpansion' (und enden mit 'endlocal'). – paxdiablo

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