2010-04-30 4 views
6

Ho un'applicazione java lanciata da un file .cmd. Voglio impostare il classpath dell'applicazione attraverso questo batch, tutti i jar necessari sono in una cartella lib.Batch and the loop

Ecco cosa ho provato:

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

Sorprendentemente, sembra che non agisce come previsto. Diciamo che v'è 3 jar nella cartella lib:

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

Ecco cosa accade:

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

Ovviamente, quello che sto cercando di ottenere è

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

Qualsiasi idea ?

Grazie e saluti,

+1

Perché avete bisogno di un file batch per includere classpath? Avete visto il nuovo trucco di Java 6 '-cp" lib/* "' Questo includerebbe tutti i jar nella directory lib – Pyrolistical

+1

+1 per Smash fan –

+0

Sfortunatamente, è necessario usare java 5 ... Ma grazie per questo, sarà sicuramente essere utile per i progetti java 6. – Farid

risposta

4

collocare questo nella parte superiore del vostro file batch:

setlocal enabledelayedexpansion 

Poi all'interno del ciclo for, sostituire %_classpath% con !_classpath!

senza espansione ritardata abilitato, %_classpath% viene espanso una volta, all'inizio del tuo per ciclo.


[Edit] In risposta a un commento, ecco un codice-listing piena

@echo off 
setlocal enabledelayedexpansion 

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

echo %_classpath% 
pause 
+0

Grazie BlueRaja (Grazie anche a Richard.), C'è un altro problema in arrivo quando si utilizza questo approccio. Posso vedere che il classpath sembra qualcosa di simile a quello alla fine del ciclo: .; pikachu.jar; sonic.jar; mario.jar Gli spazi sono inattesi e faranno male. Sai un modo rapido per sbarazzartene? Suppongo che potremmo fare un assetto giusto su %% i? – Farid

+0

@Farid: è perché hai uno spazio alla fine del tuo blocco. Vedi la risposta modificata. –

+0

Grazie mille! – Farid

1

CMD.EXE sta espandendo la %...% prima di eseguire il ciclo.

È necessario espandere l'espansione variabile, come spiegato in set /? da un prompt dei comandi.