Runtime.getRuntime()。exec()和双击执行批处理文件有什么区别?

时间:2016-01-14 01:36:34

标签: java windows batch-file cmd runtime

Runtime.getRuntime()。exec()和双击执行批处理文件有什么区别?

当我像这样使用Runtime.getRuntime()。exec()(case 1)执行批处理文件时,

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

Process p = Runtime.getRuntime().exec("cmd /c start "+"D:\\test.bat")

打开一个新的cmd控制台窗口,然后启动test.bat。

如果我尝试通过鼠标双击我的桌面来执行test.bat(案例2), 它还在新的cmd控制台窗口中打开,并启动应用程序。

但是当我尝试停止test.bat时出现了问题。我使用' Ctrl-C'停止批处理文件,

当我使用' Ctrl-C'在案例1中,cmd控制台停止但仍保留窗口和提示行。

但是当我使用' Ctrl-C'在案例2中,cmd控制台停止并关闭窗口!!

我希望在案例1中关闭窗口。但我不知道怎么做......我怎么能这样做?

PS。我试着写出退出'在test.bat中,但它无法正常工作。

1 个答案:

答案 0 :(得分:2)

在java中Runtime.exec()不是问题,如果打开cmd控制台并键入命令,则会遇到同样的问题。这是因为start没有退出(当命令结束时,带有标志C的cmd退出)。

在test.bat末尾添加exit并不起作用,因为你通过ctrl + c杀死了脚本的执行,并且没有执行exit语句。

您可以尝试按照以下方式更改通话以解决问题:

cmd /C start cmd /C test.bat