批处理和for循环

Far*_*rid 6 java batch-file classpath

我有一个.cmd文件启动的java应用程序.我想通过这个批处理设置应用程序的类路径,所有需要的jar都进入lib文件夹.

这是我尝试过的:

 set _classpath=.
for %%i in (%1/lib/*.*) do ( set _classpath=%_classpath%;%%i )
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,它似乎没有像预期的那样发挥作用.假设lib文件夹中有3个jar:

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

这是发生的事情:

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

显然,我希望得到的是

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

任何的想法 ?

感谢致敬,

Blu*_*eft 4

将其放在批处理文件的顶部:

setlocal enabledelayedexpansion
Run Code Online (Sandbox Code Playgroud)

然后在 for 循环中,替换%_classpath%!_classpath!

如果没有启用延迟扩展,%_classpath%则在 for 循环开始时扩展一次。


[编辑]为了回应评论,这里是完整的代码清单

@echo off
setlocal enabledelayedexpansion

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

echo %_classpath%
pause
Run Code Online (Sandbox Code Playgroud)