Nawiasy w zmiennych wewnątrz bloków IF

W jednym z moich skryptów muszę użyć zmiennych, które zawierają nawiasy wewnątrzIF instrukcje, ale albo łańcuchowi brakuje nawiasu zamykającego, albo skrypt kończy działanie przedwcześnie* was unexpected at this time (nie jest to gwiazdka), w zależności od scenariusza.

 

Przykład

@echo off

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

pause >nul

Wydajność

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

 

Myślę / wiem, że dzieje się tak, ponieważ myśli o nawiasie zamykającym wC:\Program Files (x86) jest koniecIF instrukcja i kończy się przedecho jest gotowy.

Czy istnieje prosty sposób na obejście tego? Najlepiej bez uciekania się do

pojedyncza liniaIF oświadczenia, ponieważ muszę uruchomić w nich więcej niż jedną linię kodu,obfite ilościGOTOs, ponieważ nie jest to praktyczne,SETLOCAL EnableDelayedExpansion i używanie!path! zamiast%path%, jak pamiętam, czytam gdzieś, że ta metoda nie działa konsekwentnie w różnych systemach operacyjnych.

Jeśli nie, z radością przyjmuję najbardziej niezawodne oferowane rozwiązanie, cokolwiek to jest.

 

(Scenariusz nie nadaje się do debaty. To tylko wyrafinowany, skoncentrowany przykład problemu. Struktura musi być taka, jak w moim aktualnym skrypcie, z powodów, w które nie będę wchodzić. i to po prostu wprowadzi w błąd rzeczy i odwróci uwagę od faktycznego problemu.)

questionAnswers(4)

yourAnswerToTheQuestion