Paréntesis en variables dentro de bloques IF
En uno de mis scripts, necesito usar variables que contengan paréntesis dentro deIF
instrucciones, pero a la cadena le falta un paréntesis de cierre o la secuencia de comandos sale prematuramente con* was unexpected at this time
(No es realmente un asterisco), dependiendo del escenario.
Ejemplo
@echo off
SET path=%programFiles(x86)%
echo Perfect output: %path%
IF NOT "%path%" == "" (
REM Variable is defined
echo Broken output: %path%
)
pause >nul
Salida
Perfect output: C:\Program Files (x86)
Broken output: C:\Program Files (x86
Creo / sé que esto es porque piensa que el paréntesis de cierre enC:\Program Files (x86)
es el final de laIF
declaración y sale antes de laecho
Esta completo.
¿Hay una manera simple de evitar esto? Preferiblemente sin recurrir a
linea solaIF
instrucciones, ya que necesito ejecutar más de una línea de código dentro de ellas,grandes cantidades deGOTO
s, ya que no es práctico,SETLOCAL EnableDelayedExpansion
y usando!path!
en lugar de%path%
, como recuerdo haber leído en alguna parte que ese método no funciona de manera consistente en los sistemas operativos.Si no, aceptaré felizmente la solución más confiable ofrecida, sea la que sea.
(El escenario no es apto para el debate. Esto es solo un ejemplo refinado y concentrado del problema. La estructura debe ser así, como está en mi guión real, por razones que no voy a analizar. punto y solo confundirá las cosas y distraerá el problema real.)