【发布时间】:2013-07-17 15:24:21
【问题描述】:
我正在使用 java Process 类来执行一些批处理文件。我正在使用ProcessBuilder 创建流程,这部分运行良好。我的问题是处理我正在运行的批处理文件中的pausecommand。 pause 命令当前正在挂起批处理的执行,但我需要完成批处理,这样我才能恢复挂起的操作。目前,我正在使用与此等效的代码开始批处理:
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
public class BatchEnter {
public static void main(String[] args) throws Exception {
List<String> params = Arrays.asList(new String[]{"cmd", "/C", "C:/test/test.bat"});
ProcessBuilder builder = new ProcessBuilder(params);
builder.directory(new File("C:/test")).redirectErrorStream(true);
Process p = builder.start();
BufferedReader wr = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while((line = wr.readLine())!=null){
System.out.println(line);
}
p.waitFor();
}
}
我知道我们可以使用这个"hack" 来跳过批处理文件中的pause 命令。但是,我的问题是我无法更改正在使用的任何批处理文件,也无法添加批处理文件来调用另一个批处理,如提供的链接中所示。
我想知道有没有办法指定进程跳过暂停命令?
【问题讨论】:
-
您可以复制批处理文件,删除 PAUSE 并运行复制。或者您可以向进程输出流发送击键(不确定它是否有效)。
-
您的批处理脚本需要多长时间才能在没有暂停的情况下完成执行?
-
不同批次有不同的执行时间。 @assylias 如果批处理文件没有调用其他任何内容,这是一个不错的选择,但不幸的是,情况并非总是如此。
-
如果您知道执行时间,您可能会猜到批处理执行完成并使用 p.destroy() 杀死进程。同样,这不是一个好的解决方案,但仍然可能对您有用。
-
@JtheRocker 感谢您的提议,我会考虑的。实际上在我们的应用程序中运行批处理并不是我们想要的,但由于这是一项要求,我们必须做一些我不一定同意的 hack。
标签: java batch-file