how to pass arguments to a batch file from java code

Hi

I have a batch file (marcxml.bat) which has the following excerpt :

@echo off

if x==%1x goto howto

java -cp C:\Downloads\Marcxml\marc4j.jar; C:\Downloads\Marcxml\marcxml.jar; %1 %2 %3

goto end

I'm calling this batch file from a java code with the following line of code:

Process p = Runtime.getRuntime().exec("cmd /c start C:/Downloads/Marcxml/marcxml.bat");

so ,that invokes the batch file.Till that point its ok.

since the batch file accpets arguments(%1 %2 %3) how do i pass those arguments to the batch file from my code ...?

%1 is a classname : for ex: gov.loc.marcxml.MARC21slim2MARC

%2 is the name of the input file for ex : C:/Downloads/Marcxml/source.xml

%3 is the name of the output file for ex: C:/Downloads/Marcxml/target.mrc

could someone help me...

if i include these parameters too along with the above line of code i.e

Process p = Runtime.getRuntime().exec("cmd /c start C:/Downloads/Marcxml/marcxml.bat gov.loc.marcxml.MARC21slim2MARC C:\\Downloads\\Marcxml\\source.xml C:\\Downloads\\Marcxml\\target.mrc") ;

I get the following error :

Exception in thread main java.lang.Noclassdef foundError: c:Downloads\marcxml\source/xml

could some one tell me if i'm doing the right way in passing the arguments to the batch file if not what is the right way?

Message was edited by:

justunme1

[1434 byte] By [justunme1a] at [2007-11-27 9:50:29]
# 1

1 - create a java class (Executer.java) for example:

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

public class Executer {

public static void main(String[] args) {

try {

for (int i = 0; i < args.length; i++) {

System.out.println(args[i]);

}

Class<?> c = Class.forName(args[0]);

Class[] argTypes = new Class[] { String[].class };

Method main = c.getDeclaredMethod("main", argTypes);

// String[] mainArgs = Arrays.copyOfRange(args, 1, args.length); //JDK 6

//jdk <6

String[] mainArgs = new String[args.length - 1];

for (int i = 0; i < mainArgs.length; i++) {

mainArgs[i] = args[i + 1];

}

main.invoke(null, (Object) mainArgs);

// production code should handle these exceptions more gracefully

} catch (ClassNotFoundException x) {

x.printStackTrace();

} catch (NoSuchMethodException x) {

x.printStackTrace();

} catch (IllegalAccessException x) {

x.printStackTrace();

} catch (InvocationTargetException x) {

x.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

}

}

2 - create a .bat file:

@echo off

java -cp C:\Downloads\Marcxml\marc4j.jar; C:\Downloads\Marcxml\marcxml.jar; Executer %TARGET_CLASS% %IN_FILE% %OUT_FILE%

3 - use set command to pass variable:

Open MS-DOS, and type the following:

set TARGET_CLASS=MyTargetClass

set IN_FILE=in.txt

set OUT_FILE=out.txt

Then run your .bat file (in the same ms dos window)

Hope that Helps

java_2006a at 2007-7-13 0:19:17 > top of Java-index,Desktop,Runtime Environment...
# 2
HiThanks but it dint serve my purpose as i need to invoke the batch file from my java code.So from my java code itself i need to pass all the 3 arguments to the batch file.I dont know how to pass these arguments from my java code to the batch file.. can u please help me..?
justunme1a at 2007-7-13 0:19:17 > top of Java-index,Desktop,Runtime Environment...