Windows PATH 变量中的空格和括号搞砸了批处理文件

16 windows path batch environment-variables

因此,我的路径变量(System->Adv Settings->Env Vars->System->PATH)设置为:

C:\Python26\Lib\site-packages\PyQt4\bin;
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;
C:\Python26\;
C:\Python26\Scripts\;
C:\cygwin\bin;
"C:\PathWithSpaces\What_is_this_bullshit";
"C:\PathWithSpaces 1.5\What_is_this_bullshit_1.5";
"C:\PathWithSpaces (2.0)\What_is_this_bullshit_2.0";
"C:\Program Files (x86)\IronPython 2.6";
"C:\Program Files (x86)\Subversion\bin";
"C:\Program Files (x86)\Git\cmd";
"C:\Program Files (x86)\PuTTY";
"C:\Program Files (x86)\Mercurial";
Z:\droid\android-sdk-windows\tools;
Run Code Online (Sandbox Code Playgroud)

虽然,显然,没有换行符。

请注意包含的行PathWithSpaces- 第一个没有空格,第二个有空格,第三个有一个空格,后跟一个括号。

现在,注意这个批处理文件的输出:

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\>vcvars32.bat
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin>"C:\Program Files (x86
)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"
Setting environment for using Microsoft Visual Studio 2008 x86 tools.
\What_is_this_bullshit_2.0";"C:\Program was unexpected at this time.
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin>      set "PATH=C:\Pro
gram Files\Microsoft SDKs\Windows\v6.0A\bin;C:\Python26\Lib\site-packages\PyQt4\
bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\
WindowsPowerShell\v1.0\;C:\Python26\;C:\Python26\Scripts\;C:\cygwin\bin;"C:\Path
WithSpaces\What_is_this_bullshit";"C:\PathWithSpaces 1.5\What_is_this_bullshit_1
.5";"C:\PathWithSpaces (2.0)\What_is_this_bullshit_2.0";"C:\Program Files (x86)\
IronPython 2.6";"C:\Program Files (x86)\Subversion\bin";"C:\Program Files (x86)\
Git\cmd";"C:\Program Files (x86)\PuTTY";"C:\Program Files (x86)\Mercurial";Z:\dr
oid\android-sdk-windows\tools;"
Run Code Online (Sandbox Code Playgroud)

或者特别是这条线:

\What_is_this_bullshit_2.0";"C:\Program was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)

那么,这是什么废话?

具体来说:

  • 路径中的目录用引号正确转义,但没有空格 = 很好
  • 路径中的目录用引号正确转义,并且有空格但没有括号 = 很好
  • 路径中的目录用引号正确转义,并且有空格和括号 = ERROR

这里发生了什么?我怎样才能解决这个问题?我可能会求助于一个连接点,让我的工具仍然可以作为解决方法,但是如果您对此有任何见解,请告诉我:)

小智 20

64 位系统上的 Windows 用户注意事项

程序~1 = '程序文件' 程序~2 = '程序文件(x86)'

https://confluence.atlassian.com/display/DOC/Setting+the+JAVA_HOME+Variable+in+Windows


Joe*_*oey 14

如果“块”内的一行中有未转义的括号(也使用括号进行分隔),就会发生这种情况。

您通常可以通过打开延迟扩展并使用变量!var!而不是来修复它%var%。在没有看到代码的情况下,我无法给出更多建议。


Mar*_*ski 14

(a) MS-Windows PATH 环境变量(PATH 命令)中应该有任何引号,或者(b)在(SET 命令)之后的整个表达式中应该有引号。不幸的是,MS 并没有很好地记录这一点,尽管他们确实声明如果使用引号,它们将包含在变量的值中(Windows XP 命令行参考)

$ SET BLAH="blah blah(1)"
$ ECHO %BLAH%
"blah blah(1)"
$ SET BLAH=blah blah(1)
$ ECHO %BLAH%
blah blah(1)
Run Code Online (Sandbox Code Playgroud)

这可能会导致不一致的问题,因此难以诊断。例如,如果您的路径包含“C:\Python27”,您的机器会说“'python' 不是内部或外部命令、可运行的程序或批处理文件。” 当您尝试执行 python 时。但是,某些库可能仍然可用。

不是要“逃离”空格或括号。如果您需要转义特殊字符,请在整个表达式周围加上引号,包括变量名称。

SET "PATH=%PATH%;C:\Program Files (x86)\path with special characters"
Run Code Online (Sandbox Code Playgroud)

或者你也可以使用括号。

(SET VAR=can't contain ampersand, parentheses, pipe, gt or lt)
Run Code Online (Sandbox Code Playgroud)

注意,双引号必须成对出现。

(SET VAR=illegal characters!@#$%^*_-+={}[]\:;""',./?)
echo %VAR%
illegal characters!@#$%*_-+={}[]\:;""',./?
Run Code Online (Sandbox Code Playgroud)

但是,可能没有任何字符是有效的路径名,这会导致 SET 命令出现问题。


归档时间:

查看次数:

116510 次

最近记录:

9 年,2 月 前