批处理和for循环

时间:2010-04-30 17:20:14

标签: java batch-file classpath

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

以下是我的尝试:

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

令人惊讶的是,它似乎没有像预期的那样发挥作用。假设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
  5. 显然,我希望得到的是

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

    有什么想法吗?

    谢谢和问候,

2 个答案:

答案 0 :(得分:4)

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

setlocal enabledelayedexpansion

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

在未启用延迟扩展的情况下,{for}循环开始时%_classpath%会扩展一次。


[编辑] 在回复评论时,这是一个完整的代码列表

@echo off
setlocal enabledelayedexpansion

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

echo %_classpath%
pause

答案 1 :(得分:1)

CMD.EXE在运行循环之前正在扩展%...%

您需要延迟变量扩展,这在set /?中从命令提示符中进行了解释。