В одном из моих сценариев мне нужно использовать переменные, содержащие круглые скобки внутри операторов 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
.
Есть ли простой способ обойти это? Желательно не прибегая к
IF
, так как мне нужно запустить в них более одной строки кода,GOTO
s, так как это нецелесообразно,SETLOCAL EnableDelayedExpansion
и используя !path!
вместо %path%
, поскольку я где-то читал, что этот метод не работает последовательно в разных ОС.Если нет, я с радостью приму самое надежное из предложенных решений, каким бы оно ни было.
(Сценарий не подлежит обсуждению. Это просто утонченный, концентрированный пример проблемы. Структура должна быть такой, как в моем реальном сценарии, по причинам, в которые я не буду вдаваться. Это не имеет значения, и это только запутает вещи и отвлечет от реальной проблемы.)