通过java运行多个cmd命令,由另一个代码分隔

时间:2016-01-26 00:32:25

标签: java windows cmd

我想启动一个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){

        }

2 个答案:

答案 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的输入流执行的下一个命令行。

听起来很痛苦。为什么你需要使用同一个窗口?