我想启动一个cmd命令,然后在第一个命令完成后,我想运行一个代码来调整文件中的某些文本,然后在同一个cmd窗口上执行另一个命令。我不知道如何做到这一点,我看到的答案是针对彼此之后的命令,而不是这种情况。用于编辑文本的代码可以正常工作而无需启动cmd,但如果我执行cmd命令则不会更改。代码如下。
public static void main(String[] args)throws IOException
{
try
{
Main m1 = new Main();
Process p= Runtime.getRuntime().exec("cmd /c start C:/TERRIERS/terrier/bin/trec_setup.bat");
p.waitFor();
/*code to change the text*/
m1.answerFile(1);
m1.questionFile(1);
/**********************/
//code to add another command here (SAME WINDOW!)
/************************/
}
catch(IOException ex){
}
catch(InterruptedException ex){
}
答案 0 :(得分:3)
执行cmd
并将命令行(.bat)发送到标准输入。
Process p = Runtime.getRuntime().exec("cmd");
new Thread(() -> {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null)
System.out.println(line);
} catch (Exception e) {
e.printStackTrace();
}
}).start();
try (PrintStream out = new PrintStream(p.getOutputStream())) {
out.println("C:/TERRIERS/terrier/bin/trec_setup.bat");
out.println("another.bat");
// .....
}
p.waitFor();
答案 1 :(得分:2)
对于初学者,\C
选项在执行初始命令后终止CMD
。请改用\K
。
您将无法使用waitFor()
来检测初始命令何时完成,因为如果等到CMD
终止,您将无法重复使用过程
相反,您需要读取CMD
进程的输出,以检测批处理文件何时完成,并提示您输入另一个命令。然后编写要通过Process
的输入流执行的下一个命令行。
听起来很痛苦。为什么你需要使用同一个窗口?