Thisara Ranawaka
Thisara Ranawaka

Reputation: 137

Run a batch file with java program

try {                               
try {
    String[] command = {"cmd.exe", "/C", "Start", "D:\\test.bat"};
        Runtime r = Runtime.getRuntime();
        Process p = r.exec(command);
        p.waitFor();

    } catch (Exception e) {
        e.printStackTrace();
        JOptionPane.showMessageDialog(this, "Error" +"Execution!","Error",JOptionPane.ERROR_MESSAGE);
        }
    } catch (IOException ex) {
        Logger.getLogger(DBBackUp.class.getName()).log(Level.SEVERE, null, ex);
    }

When I run this code, I got only command promt. .bat file is not running. How can I execute the batch file using this code?

Thank in Advance

Upvotes: 2

Views: 8910

Answers (3)

noahlz
noahlz

Reputation: 10311

Consider using Apache Commons Exec.

Upvotes: 2

1218985
1218985

Reputation: 8032

You can try something like this:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;


public class BatchExecuteService {

    public static void main(String[] args) {
        BatchExecuteService batchExecuteService = new BatchExecuteService();
        batchExecuteService.run();
    }

    public void run() {
        try {
            String cmds[] = {"D:\\test.bat"};
            Runtime runtime = Runtime.getRuntime();
            Process process = runtime.exec(cmds);
            process.getOutputStream().close();
            InputStream inputStream = process.getInputStream();
            InputStreamReader inputstreamreader = new InputStreamReader(inputStream);
            BufferedReader bufferedrReader = new BufferedReader(inputstreamreader);
            String strLine = "";
            while ((strLine = bufferedrReader.readLine()) != null) {
                System.out.println(strLine);
            }
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }
    }
}

Upvotes: 1

Vishal K
Vishal K

Reputation: 13066

let your "test.bat" be like this:

dir
pause

then you can execute this batch file as follows:

try
{
 Runtime r = Runtime.getRuntime();
 Process p = r.exec("rundll32 url.dll,FileProtocolHandler " + "D:\\test.bat");
 p.waitFor();
}catch(Exception ex){ex.printStackTrace();}

Upvotes: 1

Related Questions