我正在尝试运行位于此处的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没有打开)。我该如何解决这个问题?
答案 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\"");