У меня есть проблема сценария пакетной обработки 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
переменная, как предполагается, находится в кавычках.
Ваша проблема не в пробелах, а в закрывающей скобке. Вероятно, вы работаете на 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%
Что ж, я никогда не знал об операции , определенной
в сценариях cmd, пока только теперь ...
Ваш сценарий, кажется, у меня работает нормально - какая именно строка вызывает ошибку?
Вы также можете попробовать:
if not "%_OLD_VIRTUAL_PATH%" == "" (
set PATH=%_OLD_VIRTUAL_PATH%
)
И поверьте мне, если вы входите в сценарий Windows cmd, ожидая этого быть чем-то похожим на то, что у вас есть в bash, очень скоро у вас будет очень сильно болеть голова. Возможно, вы захотите использовать какой-либо другой язык сценариев (PowerShell, Python, PERL - что угодно), если сценарии cmd не являются абсолютным требованием. Самая большая вещь (возможно, единственная), что есть в сценариях cmd, - это то, что он уже установлен на каждом компьютере с Windows.