如何在Java中的一个cmd窗口中运行多个命令?

我想要做的是从Java应用程序多次运行batch文件。 因此我设置了一个运行此代码n次的for-loop

 for (int i = 0; i < n; i++) { Runtime.getRuntime().exec("cmd /c start somefile.bat"); } 

问题是现在每次运行命令时都会弹出一个新的cmd窗口。 但是,我想要的只是一个窗口,它在开头弹出,用于显示以下命令调用中的所有数据。

我怎样才能做到这一点?

使用&&,您可以一个接一个地执行多个命令:

 Runtime.getRuntime().exec("cmd /c \"start somefile.bat && start other.bat && cd C:\\test && test.exe\""); 

使用多个命令和条件处理符号

您可以使用条件处理符号从单个命令行或脚本运行多个命令。 当您使用条件处理符号运行多个命令时,条件处理符号右侧的命令将根据条件处理符号左侧的命令结果进行操作。

例如,您可能只想在上一个命令失败时运行命令。 或者,您可能只想在上一个命令成功时运行命令。 您可以使用下表中列出的特殊字符来传递多个命令。

& [...] command1 & command2
用于在一个命令行上分隔多个命令。 Cmd.exe运行第一个命令,然后运行第二个命令。

&& [...] command1 && command2
用于仅在符号前面的命令成功时运行&&后面的命令。 Cmd.exe运行第一个命令,然后仅在第一个命令成功完成时运行第二个命令。

|| [...] command1 || command2
用于在||后面运行命令 只有在||之前的命令 失败。 Cmd.exe运行第一个命令,然后仅在第一个命令未成功完成时才运行第二个命令(接收大于零的错误代码)。

( ) [...] (command1 & command2)
用于分组或嵌套多个命令。

; or , command1 parameter1;parameter2
用于分隔命令参数。

我会使用Java的ProcessBuilder或其他模拟/使用shell的类。 以下片段演示了这个想法(对于Linux使用bash)。

 import java.util.Scanner; import java.io.*; public class MyExec { public static void main(String[] args) { //init shell ProcessBuilder builder = new ProcessBuilder( "/bin/bash" ); Process p=null; try { p = builder.start(); } catch (IOException e) { System.out.println(e); } //get stdin of shell BufferedWriter p_stdin = new BufferedWriter(new OutputStreamWriter(p.getOutputStream())); // execute the desired command (here: ls) n times int n=10; for (int i=0; i 

请注意,它只是一个片段,需要适用于Windows,但一般来说它应该与cmd.exe