2009-02-26 7 views
2

J'ai besoin de définir mon chemin de classe en utilisant tous les jars dans un répertoire particulier. Bash il le fait comme suit:Comment préserver les variables dans les scripts de traitement par lots dans les boucles "for"?

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

Mais « for » fonctionne différemment dans le DOS, et envoie essentiellement la commande à la coquille, mais ne conservera pas le « set » sur la variable

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

Lorsque vous demandez $CP en dehors du pour, vous obtenez seulement le dernier fichier jar. Si vous faites écho à l'intérieur, vous pouvez voir que %%j a toutes les valeurs.

Est-ce que quelqu'un a trouvé une solution?

Répondre

2

Vous devez activer environnement retardé d'expansion variables avec CMD.EXE /V et utiliser !VAR!:

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

Grande, qui fonctionne, et une alternative à/V sur la ligne de commande est: SETLOCAL ENABLEDELAYEDEXPANSION –

Questions connexes