原本在 linux 上跑得好好的 shell, 突然因為需要得搬到 windows server 上跑 只好把它改成 .bat 一個很 ez 的迴圈 assign classpath 的動作 在 dos 上居然怎麻跑都不對勁, 剛改完的 .bat : @echo off set CLASSPATH=.;c:\tomcat\webapps\abc\WEB-INF\classes set MYDIR=d:\tmp\cd for %%x in (%MYDIR%\*.jar) do ( echo %%x set CLASSPATH=!CLASSPATH!;%%x echo %CLASSPATH% ) echo %CLASSPATH% 執行結果 : E:\tmp>test.bat d:\tmp\cd\common-lib1.jar .;c:\tomcat\webapps\abc\WEB-INF\classes d:\tmp\cd\common-lib2.jar .;c:\tomcat\webapps\abc\WEB-INF\classes d:\tmp\cd\common-lib3.jar .;c:\tomcat\webapps\abc\WEB-INF\classes !CLASSPATH!;d:\tmp\cd\common-lib3.jar 感覺只有最後一次迴圈的 assign 有作用, google 了半天, 發現這個東東 ... setlocal enabledelayedexpansion 一加上去馬上 work, 至於解釋, 看嘸, 也懶得看了 >__< @echo off setlocal enabledelayedexpansion set CLASSPATH=.;c:\tomcat\webapps\abc\WEB-INF\classes set MYDIR=d:\tmp\cd for %%x in (%MYDIR%\*.jar) do ( echo %%x set CLASSPATH=!CLASSPATH!;%%x echo %CLASSPATH% ) echo %CLASSPATH% 執行結果 : E:\t...
繼上回 DOS script 裡迴圈的神奇語法 , 學到了 : setlocal enabledelayedexpansion 這回又踢到鐵板了, 跟上回幾乎一樣的 script, 不過路徑變長了, 而且裡頭有空白 ... like set JAVA_HOME=C:\Program Files (x86)\IBM\WebSphere\AppServer\java 一跑迴圈又掛了, ref windows批处理中对带空格路径的处理 這篇, 一開始沒讀完整, 只看到用短路徑就搞定, 手動在那兒切了半天取到短路徑, 果然就會 work, 再仔細謮了一下, 原來不用這麻人工, 只要用下列指令 : set JAVA_HOME=C:\Program Files (x86)\IBM\WebSphere\AppServer\java rem ----- convert to short name ----- for %%x in ("%JAVA_HOME%") do set JAVA_HOME=%%~sx 就可以把路徑轉換成短路徑 !! JAVA_HOME=c:\PROGRA~2\IBM\WEBSPH~1\APPSER~1\java 厚, 這 windows 的 script 還真不是普通的麻煩 ~~~
留言