包含带空格的可执行路径的环境变量是否也包含必要的引号?

时间:2011-07-18 08:40:43

标签: windows command-line batch-file environment-variables spaces

定义环境变量时(在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 个答案:

答案 0 :(得分:5)

我会说,不用引号就行,并在使用变量的任何地方使用它们:

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"

我怀疑会正确解析。

答案 1 :(得分:-1)

命令shell可以回答您的问题:键入C:\Pro并按Tab键。

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

(这假设打开了自动完成功能,我不确定默认设置是打开还是关闭,但大多数人都会使用它,我猜)