在定义环境变量时(在
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,我真的应该把这个问题缩小到我给出的例子.也就是说,环境变量包含一个由用户或另一个批处理脚本调用的单个(可执行/批处理)工具.
也许这些空间应该以不同方式逃脱?
我会说,在没有引号的情况下执行它并在使用变量的任何地方使用它们:
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"
我怀疑会正确解析.