gpt4 book ai didi

java - 如何让java程序等待,直到用java进程执行的批处理文件终止

转载 作者:行者123 更新时间:2023-12-04 05:49:57 33 4
gpt4 key购买 nike

我正在执行一系列批处理文件,我只需要我的 java 程序等待第一个批处理文件退出,然后执行下一个。发生的情况是,在没有退出之前执行的文件的情况下,每件事都被执行了。

这是我的代码,我在循环中运行它

String cmd = "cmd /c start /min file1.bat"; 

Process pr = Runtime.getRuntime().exec(cmd);

pr.waitFor();

最佳答案

虽然我使用的是 Linux,但这也应该适用于 Windows。下面的示例代码多次执行一个 shell 进程,等待每个进程完成后再继续:

import java.util.Date;
public class Test {
public static void main(final String[] args) {
for (int i = 0; i < 5; i++) {
System.out.println("Executing command " + i + ": " + (new Date()));
try {
final Process p = new ProcessBuilder("sh", "-c", "sleep 2;").redirectErrorStream(true).start();
p.waitFor();
} catch (final Throwable t) {
t.printStackTrace();
}
}
}
}

这输出:
Executing command 0: Tue Apr 17 09:19:55 EDT 2012
Executing command 1: Tue Apr 17 09:19:57 EDT 2012
Executing command 2: Tue Apr 17 09:20:00 EDT 2012
Executing command 3: Tue Apr 17 09:20:02 EDT 2012
Executing command 4: Tue Apr 17 09:20:04 EDT 2012

打印 Runtime.exec(String)的结果(退出值)使用值 sh -c 'sleep 2;' , 我得到 2 (执行失败);但 Runtime.exec(String[]) 的结果使用 new String[] {"sh", "-c", "sleep 2;"}返回 0 (成功执行)。看着 Runtime.java ProcessBuilder.java 来源, Runtime.exec(String)使用 StringTokenizer 拆分字符串,它使用 " \t\n\r\f" 的默认分隔符.所以执行 Runtime.exec("sh -c 'sleep 2;'")将命令字符串分解为数组 ["sh", "-c", "'sleep", "2;'"] ,其中包含无效参数。

为确保命令正确执行,最好使用 Runtime.exec(String[])而不是 Runtime.exec(String) .

您的 cmd /c start /min file1.bat拆分为 ["cmd", "/c", "start", "/min", "file1.bat"] 时,命令字符串可能不起作用.以下应该工作:
Runtime.getRuntime().exec(new String[] {"cmd", "/c", "start /min file1.bat"});

关于java - 如何让java程序等待,直到用java进程执行的批处理文件终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10191529/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com