2017-01-26 1 views
0

Я пришел через это странное поведение команд летучей мыши:Bat: Set команда не работает в круглых скобках

Set path=%path%;C:\Myfolder; 

работает прекрасно. Но когда я ставлю эту внутреннюю скобку она ведет себя странно:

if defined WINDIR (set path=%path%;C:\Myfolder) 
\NVIDIA was unexpected at this time. 

или даже

(set path=%path%;C:\Myfolder) 
\NVIDIA was unexpected at this time. 

Пожалуйста, обратите внимание, что

C: \ Program Files (x86) \ NVIDIA Corporation \ PhysX \ Общий

является частью моей переменной окружения Path.

Что не так с использованием() здесь?

+7

Когда линия помещается _inside_ скобка, вы должны заключить назначения пути в кавычках: '(набор«путь =% путь %; C: \ MyFolder ")'; в противном случае скобки «% path%» закрывают строку в строке, поэтому следующая часть отмечает ошибку. – Aacini

+0

Спасибо Aacini .. Это сработало. Пожалуйста, опубликуйте его как ответ. Я отметю это. –

ответ

0

Если в круглых скобках помещена команда set, то расширение %path% устанавливает правильные круглые скобки, которые закрывают оригинал; то есть:

set path=C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common 

(set path=%path%;C:\Myfolder) 

Когда переменная %path% расширяются во второй строке, это результат:

(set path=C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Myfolder) 

Вы можете видеть, что правая скобка в (x86) части закрывает оригинальную левую скобку, так следующая часть в строке - \NVIDIA Corporation\PhysX\Common;C:\Myfolder), что является причиной ошибки.

Чтобы избежать этой ошибки, просто заключите в кавычках значения в set команды:

(set "path=%path%;C:\Myfolder") 
Смежные вопросы