1

I want to start a cmd command, then after the first command is done, I want to run a code to adjust some text in a file, then execute another command on the same cmd window. I don't know how to do that and everywhere I looked the answer is for the commands after each other which is not this case. the code for editing the text works fine without starting the cmd but if I execute the cmd command it does not change. code below.

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 Answers 2

3

Execute cmd and send your command lines (.bat) to the standard input.

    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();
Sign up to request clarification or add additional context in comments.

Comments

2

For starters, the \C option terminates CMD after executing the initial command. Use \K instead.

You won't be able to use waitFor() to detect when the initial command is done, because if you wait until the CMD terminates, you won't be able to re-use the same process.

Instead, you'll need to read the output of CMD process to detect when the batch file is complete and you are prompted for another command. Then write the next command line that you want to execute though the input stream of the Process.

Sounds like a pain. Why would do you need to use the same window?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.