Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Batch and the for loop

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 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,

like image 529
Farid Avatar asked Apr 30 '10 17:04

Farid


1 Answers

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
like image 96
BlueRaja - Danny Pflughoeft Avatar answered Sep 28 '22 07:09

BlueRaja - Danny Pflughoeft