2010-04-30 3 views
6

Ich habe eine Java-Anwendung durch eine .cmd-Datei gestartet. Ich mag den Classpath der Anwendung durch diese Partie einzustellen, alle benötigten Gläser sind in einen Ordner lib.Batch und die for-Schleife

Hier ist, was ich versucht:

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

Überraschenderweise scheint es, dass es nicht wie erwartet verhalten. Nehmen wir an, es gibt 3 jar im Ordner lib:

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

Hier ist, was passiert:

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

Offensichtlich, was ich bin auf der Suche nach ist

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

Jede Idee ?

Danke und Gruß,

+1

Warum brauchen Sie eine Batch-Datei Classpath enthalten? Haben Sie den neuen Java 6 Trick 'gesehen -cp„lib/*“', dass alle Gläser im Verzeichnis lib – Pyrolistical

+1

+1 für Smash Fan –

+0

Leider 5 verwenden müssen umfassen würde, java ... Aber danke für das, wird auf jeden Fall nützlich für Java 6 Projekte. – Farid

Antwort

4

Dieses an der Spitze Ihrer Batch-Datei:

setlocal enabledelayedexpansion 

innerhalb der dann für Schleife, ersetzen %_classpath% mit !_classpath!

Ohne verzögerte Erweiterung aktiviert ist, %_classpath% wird einmal erweitert, am Anfang Ihrer für die Schleife.


[Bearbeiten] Als Antwort auf einen Kommentar, hier ist ein Full-Code-Listing

@echo off 
setlocal enabledelayedexpansion 

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

echo %_classpath% 
pause 
+0

Dank BlueRaja (Danke Richard als auch.), Gibt es ein weiteres Problem kommt, wenn dieser Ansatz verwendet. Ich kann sehen, dass die Classpath etwas ähnliches, dass am Ende der Schleife aussieht:. ; pikachu.jar; sonic.jar; Mario.Glas Die Räume sind unerwartet und werden weh tun. Kennen Sie einen schnellen Weg, um sie los zu werden? Ich nehme an, wir könnten %% i richtig zurechtschneiden? – Farid

+0

@Farid: Es ist, weil Sie einen Platz am Ende Ihres Blocks haben. Siehe bearbeitete Antwort. –

+0

Vielen Dank! – Farid

1

CMD.EXE ist die %...% erweitern, bevor die Schleife ausgeführt wird.

Sie benötigen verzögerte Variable Expansion, wird dies erklärt in set /? von einer Eingabeaufforderung.

Verwandte Themen