Должны ли переменные среды, содержащие путь к исполняемому файлу с пробелами, также содержать необходимые кавычки? - PullRequest
5 голосов
/ 18 июля 2011

При определении переменной среды (в Windows для меня, возможно, существует более общее руководство)

set MY_TOOL=C:\DevTools\bin\mytool.exe

, если инструмент находится на пути с пробелами

set MY_TOOL=C:\Program Files (x86)\Foobar\bin\mytool.exe

должна ли переменная окружения уже содержать необходимые пробелы?

То есть она должна читать:

set MY_TOOL="C:\Program Files (x86)\Foobar\bin\mytool.exe"

вместо вышеуказанной версии без пробелов?

Примечание: В свете Joeys answer я действительно должен сузить этот вопрос до приведенных мною примеров.То есть переменные среды, которые содержат один единственный (исполняемый / пакетный) инструмент, который должен вызываться пользователем или другим пакетным сценарием.

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

Ответы [ 2 ]

5 голосов
/ 18 июля 2011

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

set MY_TOOL=C:\Program Files (x86)\Foobar\bin\mytool.exe

"%MY_TOOL%" -someoption someargument somefile

Особенно, если вы позволяете пользователю установить значение где-то, я думаю, что это самый безопасный вариант, так как ониобычно стараются не заключать его в кавычки, а не делать это.

Если есть много мест, где вы используете переменную, вы, конечно, можете переопределить:

set MY_TOOL="%MY_TOOL%"

, что делает вещи более устойчивымидля тебя.При желании вы можете определить, есть ли кавычки или нет, и добавить их, если они отсутствуют, чтобы быть полностью уверенными.

Когда ваша переменная представляет только путь к каталогу, и вы хотите добавить туда имена файлов, тогда "нет"цитаты "вещь еще важнее, иначе вы бы строили пути вроде

"C:\Program Files (x86)\Foobar\bin"\mytool.exe

или даже:

""C:\Program Files (x86)\Foobar\bin"\my tool with spaces.exe"

, которые, я сомневаюсь, будут правильно разбираться.

0 голосов
/ 18 июля 2011

Командная оболочка может ответить на ваш вопрос: введите C:\Pro и нажмите клавишу табуляции.

Автозаполнение оставит все пробелы без изменений и добавит кавычки вокруг имени файла.Итак, это то, что «официально» ожидается.

(это предполагает, что автозаполнение включено, я не уверен, включено ли оно по умолчанию или нет, но большинство людей, так или иначе, включают его, я думаю)

...