包含带有空格的可执行文件path的环境variables是否也包含必要的引号?

当定义一个环境variables(在我的Windows上,也许有一个更一般的指导原则)

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

如果工具位于具有空格的path上

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

环境variables是否已经包含必要的空格?

也就是说,应该是这样的:

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

而不是上面的版本没有空格?

注意:根据Joeys的回答 ,我真的应该把这个问题缩小到我给出的例子。 也就是说,包含由用户或另一批处理脚本调用的单个(可执行/批处理)工具的环境variables。

也许空间应该以不同的方式逃脱?

Solutions Collecting From Web of "包含带有空格的可执行文件path的环境variables是否也包含必要的引号?"

我会说,不要引号,并使用它们到处使用变量:

 set MY_TOOL=C:\Program Files (x86)\Foobar\bin\mytool.exe "%MY_TOOL%" -someoption someargument somefile 

特别是如果你让用户在某处设置值,我猜这是最安全的选择,因为他们通常不会用引号括起来,而是这样做。

如果有很多地方你使用变量,你当然可以重新定义:

 set MY_TOOL="%MY_TOOL%" 

这让你的事情更有弹性。 可选地,您可以检测是否有引号,如果不存在则添加它们以确保完整。

当你的变量只代表一个目录的路径,并且你想要在那里附加文件名时,那么“no quotes”就更加重要了,否则你会像

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

甚至:

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

我怀疑会解析正确。

命令外壳可以回答你的问题:键入C:\Pro并点击Tab键。

自动完成功能将按原样保留所有空格,并在文件名周围添加引号。 所以,这是“正式”预期的。

(这个假定自动完成是打开的,我不确定默认是打开还是关闭,但是大多数人都是这样,我想)