2010-04-30 246 views
6

我有一個.cmd文件啓動的Java應用程序。我想通過這個批處理來設置應用程序的類路徑,所有需要的jar都放到一個lib文件夾中。批處理和for循環

這裏是我的嘗試:

set _classpath=. 
for %%i in (%1/lib/*.*) do (set _classpath=%_classpath%;%%i) 

令人驚訝,似乎預期它不採取行動。比方說,有3罐子lib文件夾中:

  • pikachu.jar
  • sonic.jar
  • mario.jar

會出現以下情況:

  1. 集_classpath =。
  2. 集_classpath =; pikachu.jar
  3. 集_classpath =; sonic.jar
  4. 集_classpath =; mario.jar

很顯然,我所希望得到的

  • 設置 _classpath = .; pikachu.jar; sonic.jar; mario.jar

任何想法?

感謝和問候,

+1

爲什麼你需要一個批處理文件,包括類路徑?你有沒有看到新的Java 6技巧'-cp「lib/*」'這將包括lib目錄 – Pyrolistical 2010-04-30 17:22:59

+1

+1中的所有jar for Smash風扇 – 2010-04-30 17:24:06

+0

不幸的是,需要使用java 5 ...但謝謝你,肯定會對Java 6項目有用。 – Farid 2010-04-30 17:33:43

回答

4

將這個在您的批處理文件的頂部:

​​

然後裏面的for循環,與!_classpath!

沒有啓用延遲擴展,%_classpath%更換%_classpath%被擴大一次,在年初你for循環。


[編輯]在迴應評論,這裏是一個完整的代碼清單

@echo off 
setlocal enabledelayedexpansion 

set _classpath=. 
for %%i in (%1/lib/*.*) do (
    set _classpath=!_classpath!;%%i 
) 

echo %_classpath% 
pause 
+0

非常感謝BlueRaja(感謝理查德),使用這種方法時還會遇到另一個問題。我可以看到類路徑看起來和循環結尾的類似: 。; pikachu.jar; sonic.jar; mario。罐子 空間是不受歡迎的,會受到傷害。你知道擺脫它們的快速方法嗎?我想我們可以在%% i上做一個正確的修剪? – Farid 2010-04-30 17:50:14

+0

@法瑞德:這是因爲你在街區盡頭有一個空間。見編輯的答案。 – 2010-04-30 18:22:09

+0

非常感謝! – Farid 2010-04-30 21:39:02

1

CMD.EXE運行循環之前擴大%...%

您需要延遲變量擴展,這在set /?中從命令提示符進行了說明。