It's not a secret anymore!
The moose likes Java in General and the fly likes execute batch files in java Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Java in General
Bookmark "execute batch files in java" Watch "execute batch files in java" New topic

execute batch files in java

Sanjay Sanghavi

Joined: Jun 28, 2005
Posts: 1

I have 2 batch files "run.bat" and "run1.bat". They reside in C:/bin/. Contents of these files are as follows: Observe that "run.bat" is calling "run1.bat".

@echo Sanjay
call run1

@echo Sanghavi

My java class reside in E;/bin and it looks like...

main(String[] args)
String command = "c:/bin/run.bat";
Process child = Runtime.getRuntime().exec(command);

Result of this java code execution is that it prints "Sanjay" and then its not able to call "run1.bat"

This is because the directory where these batch files reside is different from the dir where my java class is. If I change "run.bat" as follows, it works fine and prints "Sanghavi".

@echo Sanjay
call c:/bin/run1

But I dont want to change the batch file instead is there a way I can achieve this with some code changes in java or some other way to do this?

Thanks in advance
Ernest Friedman-Hill
author and iconoclast

Joined: Jul 08, 2003
Posts: 24195


Welcome to JavaRanch!

This ought to work as long as the directory in which the BAT files are located in on your PATH.

[Jess in Action][AskingGoodQuestions]
Lewin Chan
Ranch Hand

Joined: Oct 10, 2001
Posts: 214
"cmd /c c:/bin/run.bat"

instead? Like EFH says, it should work if the bat files are in the path.

You could change the run1.bat to do (assuming windows NT or better)

set CURDIR=%~dp0
echo Sanjay
call "%CURDIR%run2.bat"

Then provided both run1 and run2 are in the same directory, you should be able to put them anyway.

I have no java certifications. This makes me a bad programmer. Ignore my post.
I agree. Here's the link:
subject: execute batch files in java
It's not a secret anymore!