Как установить PATH для другого значения переменной с пробелами в пакетном файле Windows - PullRequest
5 голосов
/ 05 мая 2010

У меня проблема с пакетным скриптом 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 должно быть в кавычках.

Ответы [ 2 ]

7 голосов
/ 05 мая 2010

Ваша проблема здесь не в пробелах, а в закрывающих скобках. Вы, вероятно, используете 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%
0 голосов
/ 05 мая 2010

Ну, я никогда не знал об операции defined в сценариях cmd до сих пор ...

Мне кажется, ваш скрипт работает нормально - какая именно строка выдает ошибку?

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...