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 deGOTOs, 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.)

Respuestas a la pregunta(4)

Su respuesta a la pregunta