Как установить ПУТЬ к другому значению переменной с пробелами в пакетном файле Windows

У меня есть проблема сценария пакетной обработки Windows, что я колочу голову против (никакая предназначенная игра слов). Проблематичный сценарий похож на это:

if defined _OLD_VIRTUAL_PATH (
    set PATH=%_OLD_VIRTUAL_PATH%
)

Когда я выполняю его и _OLD_VIRTUAL_PATH установлен я добираюсь:

\Microsoft was unexpected at this time.

_OLD_VIRTUAL_PATH переменная, которая была первоначально установлена от PATH и это содержит пробелы - я вполне уверен, это - проблема. Но каково решение? Это работает успешно, если я включаю его в кавычки, но я не думаю все значение PATH переменная, как предполагается, находится в кавычках.

5
задан EMP 5 May 2010 в 07:30
поделиться

2 ответа

Ваша проблема не в пробелах, а в закрывающей скобке. Вероятно, вы работаете на 64-битной системе, где каталог Program Files для 32-битных приложений - это Program Files (x86). В блоке с круглыми скобками в пакетном файле закрывающая скобка завершает блок, поэтому остальная часть строки вызывает синтаксическую ошибку.

У вас есть два способа исправить это:

1) Заключите весь аргумент set в кавычки. Это приведет к тому, что закрывающая паренка не будет распознана как конец блока:

if defined _OLD_VIRTUAL_PATH (
    set "PATH=%_OLD_VIRTUAL_PATH%"
)

2) Не использовать блок:

if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH%
7
ответ дан 14 December 2019 в 08:45
поделиться

Что ж, я никогда не знал об операции , определенной в сценариях cmd, пока только теперь ...

Ваш сценарий, кажется, у меня работает нормально - какая именно строка вызывает ошибку?

Вы также можете попробовать:

if not "%_OLD_VIRTUAL_PATH%" == "" (
    set PATH=%_OLD_VIRTUAL_PATH%
)

И поверьте мне, если вы входите в сценарий Windows cmd, ожидая этого быть чем-то похожим на то, что у вас есть в bash, очень скоро у вас будет очень сильно болеть голова. Возможно, вы захотите использовать какой-либо другой язык сценариев (PowerShell, Python, PERL - что угодно), если сценарии cmd не являются абсолютным требованием. Самая большая вещь (возможно, единственная), что есть в сценариях cmd, - это то, что он уже установлен на каждом компьютере с Windows.

0
ответ дан 14 December 2019 в 08:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: