Пакет и цикл - PullRequest
       31

Пакет и цикл

6 голосов
/ 30 апреля 2010

У меня есть Java-приложение, запущенное с помощью файла .cmd. Я хочу установить classpath приложения через этот пакет, все необходимые файлы находятся в папке lib.

Вот что я попробовал:

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

Удивительно, но кажется, что он не работает, как ожидалось. Допустим, в папке lib есть 3 банка:

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

Вот что происходит:

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

Очевидно, что я хочу получить

  • комплект _classpath = .; pikachu.jar; sonic.jar; mario.jar

Есть идеи?

Спасибо и всего наилучшего,

Ответы [ 2 ]

4 голосов
/ 30 апреля 2010

Поместите это в начало вашего командного файла:

setlocal enabledelayedexpansion

Затем внутри цикла for замените %_classpath% на !_classpath!

Если не включено отложенное расширение, %_classpath% раскрывается один раз, в начале цикла for.


[Редактировать] В ответ на комментарий приведен полный код-листинг

@echo off
setlocal enabledelayedexpansion

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

echo %_classpath%
pause
1 голос
/ 30 апреля 2010

CMD.EXE расширяет %...% перед запуском цикла.

Вам нужно задержать расширение переменной, это объясняется в set /? из командной строки.

...