Klammern in Variablen innerhalb von IF-Blöcken

In einem meiner Skripte muss ich Variablen verwenden, die Klammern enthaltenIF Anweisungen, aber entweder fehlt in der Zeichenfolge eine schließende Klammer oder das Skript wird vorzeitig mit beendet* was unexpected at this time (eigentlich kein Sternchen), je nach Szenario.

 

Beispiel

@echo off

SET path=%programFiles(x86)%
echo Perfect output: %path%
IF NOT "%path%" ==  "" (
    REM Variable is defined
    echo Broken output:  %path%
)

pause >nul

Ausgabe

Perfect output: C:\Program Files (x86)
Broken output:  C:\Program Files (x86

 

Ich denke / weiß, dass dies daran liegt, dass die schließende Klammer darin stehtC:\Program Files (x86) ist das Ende derIF Anweisung und es gibt vor demecho ist komplett.

Gibt es eine einfache Möglichkeit, dies zu umgehen? Am liebsten ohne Rückgriff auf

einzelne ZeileIF Anweisungen, da ich mehr als eine Codezeile in ihnen ausführen muss,reichlichGOTOs, da es nicht praktisch ist,SETLOCAL EnableDelayedExpansion und mit!path! anstatt%path%Ich erinnere mich, dass ich irgendwo gelesen habe, dass diese Methode auf allen Betriebssystemen nicht konsistent funktioniert.

Wenn nicht, nehme ich gerne die zuverlässigste Lösung an.

 

(Das Szenario steht nicht zur Debatte. Dies ist nur ein verfeinertes, konzentriertes Beispiel für das Problem. Die Struktur muss aus Gründen, auf die ich nicht näher eingehen möchte, so sein, wie es in meinem tatsächlichen Skript der Fall ist Punkt und es wird nur die Dinge verwirren und vom eigentlichen Problem ablenken.)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage