Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何在一个cmd窗口中运行多个命令?_Java_For Loop_Batch File_Windows Runtime - Fatal编程技术网

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

在Java中,如何在一个cmd窗口中运行多个命令?,java,for-loop,batch-file,windows-runtime,Java,For Loop,Batch File,Windows Runtime,我想做的是从java应用程序中多次运行批处理文件。因此,我为循环设置了一个,该循环运行此代码n次: for (int i = 0; i < n; i++) { Runtime.getRuntime().exec("cmd /c start somefile.bat"); } for(int i=0;i

我想做的是从java应用程序中多次运行
批处理
文件。因此,我为循环设置了一个
,该循环运行此代码
n次

for (int i = 0; i < n; i++) {
    Runtime.getRuntime().exec("cmd /c start somefile.bat");
}
for(int i=0;i
问题是,现在每次运行命令时,都会弹出一个新的cmd窗口。但是,我想要的只是一个在开始时弹出的窗口,用于显示来自以下命令调用的所有数据


如何执行此操作?

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

Runtime.getRuntime().exec("cmd /c \"start somefile.bat && start other.bat && cd C:\\test && test.exe\"");
使用多个命令和条件处理符号

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

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

和[…]命令1和命令2

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

&&[…]命令1&&command2

仅当符号前面的命令成功时,才使用运行&&后面的命令。Cmd.exe运行第一个命令,然后仅当第一个命令成功完成时才运行第二个命令

||[…]命令1 | |命令2

仅当| |之前的命令失败时,才使用运行| |之后的命令。Cmd.exe运行第一个命令,然后仅在第一个命令未成功完成(收到大于零的错误代码)时运行第二个命令

()[…](command1和command2)

用于分组或嵌套多个命令

;或者,command1参数1;参数2

用于分隔命令参数

我会使用Java或其他模拟/使用shell的类。下面的代码片段演示了这个想法(适用于带bash的Linux)

import java.util.Scanner;
导入java.io.*;
公共类MyExec{
公共静态void main(字符串[]args)
{
//初始化外壳
ProcessBuilder=newProcessBuilder(“/bin/bash”);
进程p=null;
试一试{
p=builder.start();
}
捕获(IOE异常){
系统输出打印ln(e);
}
//获取贝壳的标准
缓冲写入程序p_stdin=
新的BufferedWriter(新的OutputStreamWriter(p.getOutputStream());
//执行所需命令(此处:ls)n次
int n=10;

对于(inti=0;i@Jost),我很抱歉,但我不允许发表评论。我仍然需要50个声誉。 你提供的解决方案是完美的。我一直在寻找。 我只是为windows编写了一些测试类,everythink工作得非常好。非常感谢

import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class Main {

    private BufferedWriter p_stdin;

    public Main() {

        // init shell
        ProcessBuilder builder = new ProcessBuilder("C:/Windows/System32/cmd.exe");
        Process p = null;
        try {
            p = builder.start();
        } catch (IOException e) {
            System.out.println(e);
        }
        // get stdin of shell
        p_stdin = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));

        // execute commands
        executeCommand("@echo off");
        executeCommand("cd rsc");
        executeCommand("exit");

        // write stdout of shell (=output of all commands)
        Scanner s = new Scanner(p.getInputStream());
        while (s.hasNext()) {
            System.out.println(s.next());
        }
        s.close();

    }

    private void executeCommand(String command) {
        try {
            // single execution
            p_stdin.write(command);
            p_stdin.newLine();
            p_stdin.flush();
        } catch (IOException e) {
            System.out.println(e);
        }
    }

    public static void main(String[] args) {
        new Main();
    }
}

编写一个调用其他.bat文件的.bat文件,然后执行该文件。如果我使用“C:/Windows/System32/cmd.exe”而不是“/bin/bash”?@user2426316应该这样做(您可能需要添加一些额外的参数,如/start),那么这会起作用吗。非常抱歉,我无法测试它,因为我手头没有windows。在Linux下,它可以工作。我将尝试它并发布我的结果。这很完美,但您知道如何获取输出吗?我使用多个命令无法获得任何结果。请使用ProcessBuilder:
ProcessBuilder=new ProcessBuilder(“cmd.exe”、“/c”、“command1&&command2”);builder.redirectErrorStream(true);Process Process=builder.start();…Process.getOutputStream()…
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class Main {

    private BufferedWriter p_stdin;

    public Main() {

        // init shell
        ProcessBuilder builder = new ProcessBuilder("C:/Windows/System32/cmd.exe");
        Process p = null;
        try {
            p = builder.start();
        } catch (IOException e) {
            System.out.println(e);
        }
        // get stdin of shell
        p_stdin = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));

        // execute commands
        executeCommand("@echo off");
        executeCommand("cd rsc");
        executeCommand("exit");

        // write stdout of shell (=output of all commands)
        Scanner s = new Scanner(p.getInputStream());
        while (s.hasNext()) {
            System.out.println(s.next());
        }
        s.close();

    }

    private void executeCommand(String command) {
        try {
            // single execution
            p_stdin.write(command);
            p_stdin.newLine();
            p_stdin.flush();
        } catch (IOException e) {
            System.out.println(e);
        }
    }

    public static void main(String[] args) {
        new Main();
    }
}
public void TestCommandRun(){

Process process = null;
        String[] command_arr = new String[]{"cmd.exe","/K","start"};
        ProcessBuilder pBuilder = new ProcessBuilder("C:/Windows/System32/cmd.exe");
        try{
            process = pBuilder.start();
        }
        catch(IOException e){
            e.printStackTrace();
            System.out.println("Process failed");
        }
        if(null != process){
            OutputStream out = process.getOutputStream();
            OutputStreamWriter outWriter = new OutputStreamWriter(out);
            BufferedWriter bWriter = new BufferedWriter(outWriter);
            try{
                bWriter.write("dir");
                bWriter.newLine();
                bWriter.write("ipconfig");
                bWriter.flush();
                bWriter.close();
            }
            catch(IOException e){
                e.printStackTrace();
                System.out.println("bWriter Failed");
            }
            
        }
    }