开发者

Batch and the for loop

开发者 https://www.devze.com 2022-12-28 14:19 出处:网络
I have a java application launched by a .cmd file. I want to set the classpath of the application through this batch, all the needed jars are into a lib folder.

I have a java application launched by a .cmd file. I want to set the classpath of the application through this batch, all the needed jars are into a lib folder.

Here is what I tried :

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

Surprisingly, it seems 开发者_C百科that it does not act as expected. Let's say there is 3 jar in the lib folder :

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

Here is what happens :

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

Obviously, what I am looking to get is

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

Any idea ?

Thanks and regards,


Place this at the top of your batch file:

setlocal enabledelayedexpansion

Then inside the for loop, replace %_classpath% with !_classpath!

Without delayed expansion enabled, %_classpath% gets expanded once, at the beginning of your for loop.


[Edit] In response to a comment, here is a full code-listing

@echo off
setlocal enabledelayedexpansion

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

echo %_classpath%
pause


CMD.EXE is expanding the %...% before running the loop.

You need delayed variable expansion, this is explained in set /? from a command prompt.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号