一般在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 JAVA_HOME=C:\Program Files\Java\jdk1.5.0_12
set EXE_JAVA="%JAVA_HOME%"\bin\java
%EXE_JAVA% -version
2 轉成短路徑,這個我認為是最好的解決辦法。
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_12
for %x in ("%JAVA_HOME%") do set JAVA_HOME=%~sx
set EXE_JAVA=%JAVA_HOME%\bin\java
%EXE_JAVA% -version
需要注意的是,在批處理文件比如 run.bat 中,上面的for語句的變量有兩個%%號。
for %%x in ("%JAVA_HOME%") do set JAVA_HOME=%%~sx
另:如果只是想得到固定帶空格的短路徑,有一個快捷方法,使用cmd定位到某個目錄,輸入 debug 啟動x86虛模式調試,然后quit推出,那么cmd的路徑就變成短路徑了,如下圖

