我正在使用java Process
类来执行一些批处理文件。我正在使用ProcessBuilder
来创建进程,这部分运行正常。我的问题是在我正在运行的批处理文件中处理pause
命令。 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
命令。但是,我的问题是我无法更改我正在使用的任何批处理文件,我无法添加批处理文件来调用另一个批处理,就像在提供的链接中一样。
我想知道有没有办法指定进程跳过暂停命令?
答案 0 :(得分:1)
正如assylias所说,你只需要打开输出流并向脚本发送命令。这将帮助你暂停。
Sending commands to a console application?
有例子。我之前做过的一件事就是一次只读一行。如果行字符串与提示请求匹配,则在发生这种情况时发送换行符。这样你就不必担心哪些脚本有提示或频率。