Windows 包含带空格的可执行路径的环境变量是否也应包含必要的引号?
定义环境变量时(在Windows for me上,可能有更一般的指导原则) 如果工具位于带有空格的路径上Windows 包含带空格的可执行路径的环境变量是否也应包含必要的引号?,windows,command-line,batch-file,environment-variables,spaces,Windows,Command Line,Batch File,Environment Variables,Spaces,定义环境变量时(在Windows for me上,可能有更一般的指导原则) 如果工具位于带有空格的路径上 set MY_TOOL=C:\Program Files (x86)\Foobar\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
环境变量是否已经包含必要的空格
也就是说,应改为:
set MY_TOOL="C:\Program Files (x86)\Foobar\bin\mytool.exe"
而不是上面没有空格的版本
注:鉴于,我真的应该把这个问题缩小到我给出的例子。也就是说,包含单个(可执行/批处理)工具的环境变量将由用户或其他批处理脚本调用
也许空格的转义方式应该有所不同?我想说的是,在不使用引号的情况下转义,并在使用变量的任何地方使用它们:
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"
我怀疑它是否能正确解析。命令shell可以回答您的问题:键入
C:\Pro
,然后按tab键
“自动完成”将保留所有空格,并在文件名周围添加引号。所以,这就是“官方”所期望的
(这假设打开了自动完成,我不确定默认设置是打开还是关闭,但我想大多数人都打开了它)这似乎与这个问题有关,实际上Windows只在路径周围和/或路径内使用引号来防止空格和特殊字符,但在所有其他方面都忽略了它们。因此,类似于
“C:\Program Files(x86)\Foobar\bin”\“my tool.exe”
之类的东西可以很好地解析执行、路径、目录、复制等内容。它相当于“C:\Program Files(x86)\Foobar\bin\my tool.exe”
""C:\Program Files (x86)\Foobar\bin"\my tool with spaces.exe"