Скобки в переменных внутри блоков IF

В одном из моих сценариев мне нужно использовать переменные, содержащие круглые скобки внутри операторов IF, но либо в строке отсутствует закрывающая круглая скобка, либо сценарий преждевременно завершает работу с* was unexpected at this time(на самом деле не звездочка ), в зависимости от сценария.

Пример

@echo off

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

pause >nul

Выход

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

Я думаю/знаю, что это потому, что он считает закрывающую скобку в C:\Program Files (x86)концом оператора IFи завершает работу до завершения echo.

Есть ли простой способ обойти это? Желательно не прибегая к

  1. одиночные операторы -строки IF, так как мне нужно запустить в них более одной строки кода,
  2. большое количество GOTOs, так как это нецелесообразно,
  3. SETLOCAL EnableDelayedExpansionи используя !path!вместо %path%, поскольку я где-то читал, что этот метод не работает последовательно в разных ОС.

Если нет, я с радостью приму самое надежное из предложенных решений, каким бы оно ни было.

(Сценарий не подлежит обсуждению. Это просто утонченный, концентрированный пример проблемы. Структура должна быть такой, как в моем реальном сценарии, по причинам, в которые я не буду вдаваться. Это не имеет значения, и это только запутает вещи и отвлечет от реальной проблемы.)

12
задан mythofechelon 14 August 2012 в 00:33
поделиться