Algunos archivos por lotes en Windows utilizan una sintaxis IF con múltiples líneas, como a continuación:archivos por lotes, Vista x64, si y el paréntesis
if var==rule (
some comands
) else (
else commands
)
Ahora, Windows Vista x64 decidieron poner los 32 archivos de bits en "C : \ Archivos de programa (x86) ". Desafortunadamente, cada vez que utiliza una variable de entorno (como PATH) dentro de una línea múltiple IF sin comillas, el paréntesis dentro del valor de la variable confunde IF, cancelando el archivo por lotes. Por ejemplo:
if "%OS%"=="Windows_NT" (
@setlocal
call :set_home
set _ARGS=%*
) else (
set _SCALA_HOME=%SCALA_HOME%
rem The following line tests SCALA_HOME instead of _SCALA_HOME, because
rem the above change to _SCALA_HOME is not visible within this block.
if "%SCALA_HOME%"=="" goto error1
call :set_args
)
Un archivo por lotes con esta fallará a pesar de que la línea donde aparece% SCALA_HOME% no se ejecuta. Esto es bastante molesto ¿Existe alguna solucion para esto?
Si la expansión demorada resuelve este problema, no necesitaría una segunda secuencia de comandos por lotes, simplemente coloque 'setlocal enableextensions enabledelayedexpansion' en la parte superior de la secuencia de comandos. –
¡No lo sabía, gracias Patrick! Mucho más bonito. –
Intentaré usar setlocal enableextensions enabledelayedexpasion. Si funciona, necesitaré otra respuesta para establecer como aceptada. –