Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running a .bat/ .cmd file from Java [closed]

Tags:

java

I wanted to run a .cmd file from Java. I have something which works for me. Can someone help me understand possible failures of my program.

import java.io.IOException;  

/* 
  How to run a batch .bat or .cmd file from Java? 
  1. I don't want the command window to open up. It should be in background. 
  2. Gracefully destroy any new process created. 
  3. Need to confirm the quality of the program with experts. 
 */  
public class RunBat {  
    public static void main(String args[]) {  
        Runtime run = Runtime.getRuntime();  
        //The best possible I found is to construct a command which you want to execute  
        //as a string and use that in exec. If the batch file takes command line arguments  
        //the command can be constructed a array of strings and pass the array as input to  
        //the exec method. The command can also be passed externally as input to the method.  

        Process p = null;  
        String cmd = "D:\\Database\\TableToCSV.cmd";  
        try {  
            p = run.exec(cmd);  
            p.getErrorStream();  
            System.out.println("RUN.COMPLETED.SUCCESSFULLY");  
        }  
        catch (IOException e) {  
            e.printStackTrace();  
            System.out.println("ERROR.RUNNING.CMD");  
            p.destroy();  
        }  
    }  
}  

Is my solution reliable? How can I make sure that once the .cmd is execute there is no processes hanging around.

Thanks.

like image 653
DKG Avatar asked Jul 18 '10 10:07

DKG


People also ask

How do I run a batch file without closing a window?

If you're creating a batch file and want the MS-DOS window to remain open, add PAUSE to the end of your batch file. This prompts the user to Press any key. Until the user presses any key, the window remains open instead of closing automatically.


2 Answers

I don't know what you are doing with p.getErrorStream(), You are not accesing it.

Way to determine result i.e. exit code of command executed is by adding following lines after

p = run.exec(cmd);
p.waitFor();
System.out.println(p.exitValue());

And put p.destroy() in finally block.

Hope this helps.

like image 125
YoK Avatar answered Oct 26 '22 03:10

YoK


Execute your command as:

cmd.exe /C d:\database\tabletoCSV.cmd

See cmd.exe /? for more information:

> cmd /?
Starts a new instance of the Windows command interpreter

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
   [[/S] [/C | /K] string]

/C      Carries out the command specified by string and then terminates
/K      Carries out the command specified by string but remains
[...]
like image 28
ars Avatar answered Oct 26 '22 04:10

ars