tobiased
Goto Top

Auführung mehrere Command-line Befehle mit Java

Hallo Zusammen,

ich möchte gern ein kleines Script schreiben, welches mir mehrere CMD-Befehle hineinander ausführt. Mein Problem ist nun das ich mit dem Befehle
Process p = Runtime.getRuntime().exec(cmd /c dir)
nur einen Befehl übergeben kann, der in 1 Zeile geschrieben werden kann.
Den code mehremals zu verwenden also z.B.
Process p = Runtime.getRuntime().exec(cmd /c start dir)
Process p = Runtime.getRuntime().exec(cmd /c start ipconfig)
nützt mir nichts, da ich so immer wieder eine neue CMD aufrufe und somit ich nicht auf vorherigen Befehlen aufbauen kann was ich muss.
Meine Frage nun gibt es eine andere Möglichkeit dies zu lösen oder eine Möglichkeit einen "Enterdruck" zu übergeben.

Content-Key: 276139

Url: https://administrator.de/contentid/276139

Printed on: April 25, 2024 at 20:04 o'clock

Mitglied: 114757
Solution 114757 Jul 01, 2015 updated at 11:38:51 (UTC)
Goto Top
Moin,
das geht mit dem ProcessBuilder:
http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html

Gruß jodel32
Member: colinardo
Solution colinardo Jul 01, 2015, updated at Jul 02, 2015 at 09:13:44 (UTC)
Goto Top
Hallo Tobiased,
wie @114757 schon richtigerweise erwähnt hat, ProcessBuilder ist dein Freund

Hier ein Beispiel für mehrere Befehle in einem gemeinsamen Environment:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

public class RunMultipleCommands {
    public static void main(String Args){
        // Kommandoliste erstellen (jedes Argument muss ein separates Array-Element sein)
        String commandlist = {
                {"ping","localhost"},  
                {"ping","8.8.8.8"}  
        };
        // Liste der Befehle ausführen
        RunCommands(commandlist);
    }
    // Funktion die die Befehle in einerm gemeinsamen Evironment ausführt
    public static void RunCommands(String commands){
        try{
            ProcessBuilder pb = new ProcessBuilder();
            String s = null;
            Charset charset = Charset.forName("IBM850");  
            BufferedReader stdInput;
            Process proc;
            for (String command :commands){
                pb.command(command);
                proc = pb.start();
                stdInput = new BufferedReader(new InputStreamReader(
                        proc.getInputStream(),charset));
                while ((s = stdInput.readLine()) != null) {
                    System.out.println(s);
                }
            }
    }catch(Exception ex){}
    }
}
Grüße Uwe
Member: Tobiased
Tobiased Jul 02, 2015 at 09:14:31 (UTC)
Goto Top
Ich danke euch face-smile