定义环境变量时(在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,我真的应该将这个问题缩小到我给出的例子。也就是说,环境变量包含一个由用户或另一个批处理脚本调用的单个(可执行/批处理)工具。
也许空格应该以不同方式转义?
答案 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键。
自动完成将保留所有空格,并在文件名周围添加引号。所以,这就是“正式”预期的结果。
(这假设打开了自动完成功能,我不确定默认设置是打开还是关闭,但大多数人都会使用它,我猜)