2010-04-30 16 views
6

Mam aplikację Java uruchomioną przez plik .cmd. Chcę ustawić ścieżkę klasy aplikacji przez tę partię, wszystkie potrzebne słoiki znajdują się w folderze lib.Partia i pętla for

Oto, co starałem:

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

Co ciekawe, wydaje się, że nie działa zgodnie z oczekiwaniami. Można powiedzieć, że jest 3 jar w folderze lib:

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

Oto co się dzieje:

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

Oczywiście, czego szukam, aby uzyskać to

  • ustawione _classpath = .; pikachu.jar; sonic.jar; mario.jar

pomysł, ?

Dzięki i pozdrawiam,

+1

Dlaczego potrzebny plik wsadowy zawierać ścieżki klasy? Czy widziałeś nową sztuczkę Java 6 '-cp" lib/* "' To by zawierało wszystkie słoiki w katalogu lib – Pyrolistical

+1

+1 dla fanów Smasha –

+0

Niestety, potrzebuję użyć java 5 ... Ale dzięki za to, na pewno przydać się w projektach Java 6. – Farid

Odpowiedz

4

Place to u góry pliku wsadowym:

setlocal enabledelayedexpansion 

następnie wewnątrz pętli for, wymienić %_classpath% z !_classpath!

Bez włączonej opóźniony rozbudowa, %_classpath% zostanie rozszerzony raz, na początku swojego dla pętli.


[Edytuj] W odpowiedzi na komentarz, tutaj jest pełny kod z wykazu

@echo off 
setlocal enabledelayedexpansion 

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

echo %_classpath% 
pause 
+0

Dzięki BlueRaja (dziękuję również Richardowi.), Pojawił się kolejny problem podczas korzystania z tego podejścia. Widzę, że ścieżka klasy wygląda podobnie do tego na końcu pętli: .; Pikachu.jar; sonic.jar; mario.jar Przestrzenie są niedotrzymane i będą bolały. Czy znasz szybki sposób na pozbycie się ich? Przypuszczam, że moglibyśmy wykonać poprawne przycięcie na %%? – Farid

+0

@Farid: To dlatego, że masz miejsce na końcu twojego bloku. Zobacz edytowaną odpowiedź. –

+0

Dziękuję bardzo! – Farid

1

CMD.EXE rozszerza %...% przed uruchomieniem pętli.

Potrzebne jest opóźnione rozwijanie zmiennych, wyjaśnione to jest w wierszu poleceń pod numerem set /?.