2009-02-26 3 views
2

Ich muss meinen Klassenpfad mit allen Gläsern in einem bestimmten Verzeichnis festlegen. Bash tut es wie folgt:Wie erhalte ich Variablen in Batch-Skripten, wenn sie in "for" -Schleifen gesetzt sind?

CP_DELIMITER=; 
for j in "$MY_HOME/javalib/*.jar"; do 
    if [ "$CP" ]; then 
     CP="$CP$CP_DELIMITER$j" 
    else 
     CP="$j" 
    fi 
done 

Aber "for" funktioniert anders in DOS und sendet im Wesentlichen den Befehl an die Schale, aber nicht die "set" auf die Variable

set CP=./ 
for %%j in (%MY_HOME%\javalib\*.jar) do (
    set $CP=%CP%;"%%j" 
) 

bewahren Wenn Sie $CP außerhalb der für fragen, erhalten Sie nur die letzte JAR-Datei. Wenn Sie innerhalb von echo echo, können Sie sehen, dass %%j hat alle Werte.

Hat jemand eine Lösung gefunden?

Antwort

2

Sie benötigen verzögerte Erweiterung von Umgebungsvariablen mit CMD.EXE /V aktivieren und verwenden !VAR!:

set CP=./ 
for %%j in (%MY_HOME%\javalib*.jar) do (set CP=!CP!;"%%j") 
+0

Große, das funktioniert, und eine Alternative zu/V auf der Kommandozeile ist: SETLOCAL ENABLEDELAYEDEXPANSION –