2012-02-01 7 views
55

cuando estoy corriendo este script (desde un archivo .bat):ventanas de lotes definido dentro si no funciona

set var1=true 
if "%var1%"=="true" (
    set var2=myvalue 
    echo %var2% 
) 

siempre me sale:

ECHO is on. 

es decir, la variable de var2 no era realmente conjunto. ¿Alguien puede ayudarme a entender por qué?

Respuesta

103

var2 se establece, pero la expansión en la línea echo %var2% se produce antes de que se ejecute el bloque. En este momento, var2 está vacío.

Por lo tanto, existe la sintaxis de expansión diferida, utiliza ! en lugar de % y se evalúa en tiempo de ejecución, no en tiempo de análisis.

setlocal EnableDelayedExpansion 
set var1=true 
if "%var1%"=="true" (
    set var2=myvalue 
    echo !var2! 
) 
+5

Gracias me ha ahorrado un gran dolor. – Myna

+14

¡Scripts de lotes de Friggin! –

+0

muito obrigado "" – durtto

Cuestiones relacionadas