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

Si ejecuto el script anterior, aparece el siguiente error. ¿Alguien puede ayudar?Si condición en archivos de proceso por lotes

La sintaxis del comando es incorrecta.

Gracias.

Respuesta

23

El eco tiene que ser o bien al final de la instrucción if:

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

o de la siguiente forma:

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

que tienden a utilizar el primero para los condicionales muy simples y el este último por los múltiples comandos y primitivas while declaraciones:

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

Wh en su pieza particular de código que está haciendo es tratando de ejecutar el comando if %var1%=="Yes" que no es válido en sí mismo.

+0

Gracias. ¿Es aplicable solo para echo o para todos los comandos que siguen como resultado positivo para if? – bdhar

+0

@bdhar, esa es la sintaxis para el comando 'if', entonces sí, todos, no solo echo. – paxdiablo

+1

+1 por un bucle while en el archivo por lotes. –

3

echar un vistazo a si la ayuda de comandos:

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 

Por lo tanto, mando debe estar en la misma línea de SI. La secuencia de comandos debe ser:

@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

No se puede poner una nueva línea al igual que en el medio de la IF. Por lo que podría hacer esto:

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

O, si usted quiere que sus declaraciones repartidas en múltiples líneas puede utilizar paréntesis:

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

Sin embargo, cuando se está utilizando soportes de tener cuidado, porque la variable Es posible que la expansión no se comporte como esperabas. Por ejemplo:

set myvar=orange 

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

Salidas:

orange 

Esto se debe a que todo lo que entre los soportes se trata como un solo estado y todas las variables se expanden antes de cualquiera de los comandos se ejecutan entre los soportes. Puede solucionar esto usando expansión retardada:

setlocal enabledelayedexpansion 
set myvar=orange 

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

Consejo sabio. TODAS mis scripts cmd comienzan con 'setlocal enableextensions enabledelayedexpansion' (y terminan con '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 
Cuestiones relacionadas