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,reichlichGOTO
s, 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.)