1

複数の Windows システム コマンド (Java を使用) を順番に実行し、最初の結果に応じて 2 番目を実行するにはどうすればよいですか?

このような:

adb.exe -s emulator-5554 shell
ls

リスト結果を取得します。

これは私のソース コードですが、機能していません。

public void connectToDevice(String device) {
    List<String> cmd = new ArrayList<String>();
    cmd.add("adb.exe -s " + device + " shell");
    cmd.add("ls");
    try {
        ProcessBuilder pb = new ProcessBuilder(cmd);
        pb.redirectErrorStream(true);
        Process process = pb.start();
    } catch (IOException e) {
        System.err.println(e.getMessage());
    }
}
4

1 に答える 1

1

ProcessBuilder(List<String>)コンストラクターは、複数のコマンドを並行して実行するためのものではありません。最初の要素リストをコマンドとして、後続の要素を引数として取るため、実際に実行されるのはadb.exe -s emulator-5554 shell ls1 つのコマンドとしてです。これを 2 つのプロセスに分割します。

ProcessBuilder pb1 = new ProcessBuilder("adb.exe -s " + device + " shell");
pb1.redirectErrorStream(true);
Process p1 = pb1.start();
p1.waitFor();

ProcessBuilder pb2 = new ProcessBuilder("ls");
pb2.redirectErrorStream(true);
Process p2 = pb2.start();
p2.waitFor();
于 2013-02-03T00:19:10.450 に答える