天天看点

Windows批处理中对带空格路径的处理

一般在windows的软件大部分安装在c:\ program files下面,比如我机器上的java位置就是c:\program files\java\jdk1.5.0_12,假如如果你在批处理中调用java或者javaw,会这么写:

set java_home=c:\program files\java\jdk1.5.0_12

set exe_java=%java_home%\bin\java

%exe_java% -version

那样会报告一个错误:

'c:\program' 不是内部或外部命令,也不是可运行的程序

或批处理文件。

以前为了避免这种问题,会把把jdk挪到c:\,但不是一个通用的解决办法,现在可以采用两种方式来解决:

1 加上引号,表示一个完整路径,这个在好多服务器批处理中常用到比如jboss,  tomcat。

set exe_java="%java_home%"\bin\java 

2 转成短路径,这个我认为是最好的解决办法。

for %x in ("%java_home%") do set java_home=%~sx

需要注意的是,在批处理文件比如 run.bat 中,上面的for语句的变量有两个%%号。

for %%x in ("%java_home%") do set java_home=%%~sx

另:如果只是想得到固定带空格的短路径,有一个快捷方法,使用cmd定位到某个目录,输入 debug 启动x86虚模式调试,然后quit推出,那么cmd的路径就变成短路径了,如下图

Windows批处理中对带空格路径的处理
Windows批处理中对带空格路径的处理