从Java运行.bat不会显示CMD
我正在尝试运行位于此处的.bat文件: C:\A\B\C\D E\F 因此,我援引:从Java运行.bat不会显示CMD,java,batch-file,runtime.exec,Java,Batch File,Runtime.exec,我正在尝试运行位于此处的.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 /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没有打开的程序的执行情况。如何解决此问题?我建议您使用以下命令:
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();
}
在一个单独的批处理文件中,说abc.bat。
然后使用以下行运行abc.bat文件:
我找到了一个解决方案:
我将start/wait移动到命令的第二部分,它起了作用:
Runtime.getRuntime.execcmd+\cd C:\\A\\B\\C\\D E\\F&&start/wait A.bat\ 那有点乱。当然,您的第一个命令是从命令提示符运行的,但随后您尝试从java内部运行一个完全不同且功能不全的命令 我假设您要从java中删除a.bat,在这种情况下,START/WAIT对您没有任何好处。子进程将等待目标START to finish,但这对java进程没有影响 为什么不让子进程删除该文件?我相信以下方法会奏效
Runtime.getRuntime().exec("cmd /c \"cd C:\\A\\B\\C\\D E\\F&&a.bat&&del a.bat\"");
在批处理脚本完成之前,delete命令不会激发。如果要始终删除脚本,即使脚本失败,请将&&更改为&。实际问题是什么?
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!");
}
Runtime.getRuntime().exec("cmd /c \"cd C:\\A\\B\\C\\D E\\F&&a.bat&&del a.bat\"");