2009-09-22

批次檔設定 classpath

windows 的批次檔以利用 for 來對目錄中的檔案進行處理,但是 for 在取得環境變數只會在一開始取,因此,如果當我們將批次檔寫成:
set CLASSPATH=
for %i in (*) do set LIST=% CLASSPATH%;%i
echo % CLASSPATH%
並不會建立目前目錄中所有檔案的清單,相反的只會將 CLASSPATH 變數設為最後一個找到的檔案。因為 % CLASSPATH% 只有在 FOR 敘述第一次被讀入時才展開,此時 CLASSPATH 變數是空的。所以我們實際執行的 FOR 迴圈是:
for %i in (*) do set LIST= %i
可是當我照著微軟的說明,將 % 改為 ! ,還是得不到正確的結果:
set CLASSPATH =
for %i in (*) do set LIST=! CLASSPATH!;%i
echo % CLASSPATH%
這部份我還沒找到為什麼不行。後來,在網路上找了一下,發現只要呼叫外部的批次檔或是其它 label 就不會有問題了:
set CLASSPATH =
FOR /f %%I IN ('dir /b *.jar') DO call :cpappend %%I
echo %CLASSPATH%
goto end
:cpappend
set CLASSPATH=%CLASSPATH%;%1
:end