我有一个.cmd文件启动的java应用程序。我想通过这个批处理设置应用程序的类路径,所有需要的jar都进入lib文件夹。
以下是我的尝试:
set _classpath=.
for %%i in (%1/lib/*.*) do ( set _classpath=%_classpath%;%%i )
令人惊讶的是,它似乎没有像预期的那样发挥作用。假设lib文件夹中有3个jar:
以下是发生的事情:
显然,我希望得到的是
有什么想法吗?
谢谢和问候,
答案 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 /?
中从命令提示符中进行了解释。