从Java运行.bat不会显示CMD

时间:2013-03-04 17:37:34

标签: java batch-file runtime.exec

我正在尝试运行位于此处的a.bat文件:

C:\ A \ B \ C \ D E \ F

所以我调用:

cmd /c "cd C:\A\B\C\D E\F && a.bat"

在CMD上,我可以看到文件的执行情况。

现在我想从Java运行此文件然后删除它,所以我运行:

Runtime.getRuntime().exec("cmd start /wait /c "+ "\"cd C:\\A\\B\\C\\D E\\F && a.bat\"");

/wait,因为我只想在执行后删除文件)

但是我没有看到程序的执行(CMD没有打开)。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

Runtime run = Runtime.getRuntime();  
        Process process = null;  
        String cmd = "cmd start /wait /c "+ "\"cd C:\\A\\B\\C\\D E\\F && a.bat\"";  
        try {  
            process = run.exec(cmd);
            process.waitFor();
            System.out.println(process.exitValue());
        }  
        catch (IOException e) {  
            e.printStackTrace();  
            process.destroy();  
        } 

答案 1 :(得分:1)

我建议您放置命令:

start /wait /c "cd C:\A\B\C\D E\F && a.bat"

在单独的批处理文件中(例如abc.bat) 然后使用以下行运行abc.bat文件:

Process process = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + "abc.bat");
process.waitFor();//throws InterruptedException . So it must be caught.
if (process.exitValue() == 0 )
{
 System.out.println("Process is executed successfully!");
}

答案 2 :(得分:1)

这有点乱。当然,您的第一个命令在命令提示符下工作,但是您尝试在java中运行完全不同的(并且功能失调的)命令。

我假设您要从java中删除a.bat,在这种情况下,START / WAIT永远不会对您有任何好处。子进程将等待START的目标完成,但这对您的java进程没有影响。

为什么不让子进程删除文件?我相信以下内容会奏效。

Runtime.getRuntime().exec("cmd /c \"cd C:\\A\\B\\C\\D E\\F&&a.bat&&del a.bat\"");

删除命令在批处理脚本完成之前才会触发。如果您想要始终删除脚本,即使它失败了,请将&&更改为&

答案 3 :(得分:0)

我找到了一个解决方案:)

我将开始/等待移动到命令的第二部分并且工作正常:

Runtime.getRuntime().exec("cmd "+ "\"cd C:\\A\\B\\C\\D E\\F && start /wait a.bat\"");