Как сохранить переменные в пакетных сценариях, когда они установлены в циклах for? - PullRequest
2 голосов
/ 26 февраля 2009

Мне нужно установить мой путь к классу, используя все банки в определенном каталоге. Bash делает это следующим образом:

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

Но "for" работает по-другому в DOS и по существу отправляет команду в оболочку, но не сохраняет "set" в переменной

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

Когда вы запрашиваете $CP за пределами for, вы получаете только последний файл jar. Если вы эхо внутри, вы можете увидеть, что %%j имеет все значения.

Кто-нибудь нашел решение?

1 Ответ

2 голосов
/ 26 февраля 2009

Вам нужно будет включить отложенное расширение переменной среды с помощью CMD.EXE /V и использовать !VAR!:

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