CMD über Java öffnen

lam_tr

Top Contributor
Hallo zusammen,

weiss hier jemand wie ich cmd.exe über Java öffnen kann so dass der gewünschte Ordner auch schon selektiert wird.

Beispiel ich will den c:\test Ordner in der Konsole öffnen, wie kann ich es machen?

Runtime.getRuntime().exec("cmd /c start cmd.exe");

und wie mache ich den "cd c:\test" Aufruf?

Gruss lam
 
Also eine kurze Google-Suche liefert mir, dass man mittels
Code:
cmd /k <befehl>
einen ersten Befehl absetzen kann.
Wie man in Java einen Befehl ans OS weiterreicht, hast Du ja bereits erkannt. Also wo ist das Problem?
 
Also eine kurze Google-Suche liefert mir, dass man mittels
Code:
cmd /k <befehl>
einen ersten Befehl absetzen kann.
Wie man in Java einen Befehl ans OS weiterreicht, hast Du ja bereits erkannt. Also wo ist das Problem?

Naja, z.B. könnte das Problem auftreten, dass das Verzeichnis nicht auf dem aktuellen Laufwerk liegt.
Dann bräuchte man nämlich 2 Befehle (einen zum Laufwerkswechsel und einen für das Verzeichis).

In dem Fall könnte man sich z.B. so behelfen:
Java:
//...

    public static void main(String[] args) {
      try {
         Runtime runtime = Runtime.getRuntime();

         // Erste Shell oeffnen...
         // In dieser Instanz wird schon in das
         // Laufwerk:\Verzeichnis gewechselt,
         // jedoch kein neues Fenster geoeffnet.
         // Daher wird aus dieser Instanz spaeter noch einmal
         // eine weitere Shell mit "start" aufgerufen, die
         // sich dann schon im richtigen Verzeichnis befindet.
         Process process = runtime.exec("cmd.exe /K"); 
         OutputStream os = process.getOutputStream();
         OutputStreamWriter ow = new OutputStreamWriter(os);
         BufferedWriter bw = new BufferedWriter(ow);

         // Wechel des Laufwerks
         bw.write("c:");
         bw.newLine();
         // Verzeichnis wechseln
         bw.write("cd \\temp");
         bw.newLine();
         // dann, neue Shell oeffnen 
         // mit ggf. weiterer Anweisung wie hier z.B. "dir"
         bw.write("start cmd.exe /K dir"); 
         bw.newLine();

         // Hier machen weitere Anweisungen keinen Sinn, da diese in der
         // ersten (unsichtbaren) Instanz der Shell ausgeführt werden wuerden.

         bw.flush();
         bw.close();
         ow.close();
         os.close();

      } catch (IOException ex) {
         Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
      }
    }

//...

Ist nur so auf die Schnelle zusammengestrickt und irgendwie noch eine Krücke,
denn die erste Shell öffnet bei mir nur dann ein Fenster, wenn ich sie per
"start cmd.exe /K" aufrufe. Dann bekomme ich allerdings keinen OutputStream
mehr zur cmd.exe sondern zur aufrufenden Instanz.

Wenn man direkt die erste Instanz der Shell als Fenster öffnen könnte und für diese
auch noch einen OutputStream hätte, würde das die Sache natürlich erleichtern und
auch weitere Anweisungen möglich machen. Hat dazu jemand einen Tipp?

Klar könnte man sich zu dieser natürlich auch den InputStream holen, aber ich denke,
das würde den Rahmen für diesen Fall hier sprengen.

VG ROlf
 
Ist das nur für dich, sonst musst du mit den Laufwerkbuchstaben aufpassen, manche haben C: andere benutzen D: und wieder andere E: .
 
Ist das nur für dich, sonst musst du mit den Laufwerkbuchstaben aufpassen, manche haben C: andere benutzen D: und wieder andere E: .
Ist das Dein Ernst, dass Du von einem Code-Beispiel nicht auf die generische Variante schließen kannst?
Der TO hat nach einer Variante gefragt, CMD aus Java aufzurufen und in C:\Test zu beginnen. Das habe ich ihm gezeigt.
Danach kritisierte jemand diese Lösung, weil es nur C: beinhaltet. Also habe ich gezeigt, wie es auf jedem Laufwerk geht.
Und nun kommst Du und kritisierst ... was genau?

Herrje, ich wusste vor diesem Thread auch nicht, wie das geht. Aber ich kann google anscheinend bedienen. Wer immer noch Fragen oder Kritik hat: nur her damit! Aber sachlich bleiben und die Angaben auch verstehen.
 
Ist das Dein Ernst, dass Du von einem Code-Beispiel nicht auf die generische Variante schließen kannst?...

Nachdem ich schon einige deiner Beiträge gelesen hab, scheinst Du ein etwas dünnes Nervenkostüm zu haben... ;-)

Code:
cmd /k "E: & cd\test"

Meinen Code-Ausschnitt habe ich getestet.

DU scheinst Deinen allerdings nicht mit dem runtime.exec(...) getestet zu haben.
Sonst hättest Du gemerkt, dass sich da kein Fenster auftut. Und das ist es,
worum es dem TO ging.
 
Nachdem ich schon einige deiner Beiträge gelesen hab, scheinst Du ein etwas dünnes Nervenkostüm zu haben... ;-)
Ja, das stimmt wohl 🙁



Meinen Code-Ausschnitt habe ich getestet.

DU scheinst Deinen allerdings nicht mit dem runtime.exec(...) getestet zu haben.
Sonst hättest Du gemerkt, dass sich da kein Fenster auftut. Und das ist es,
worum es dem TO ging.
Gut, Du hast mich erwischt. Dann machs eben so: Getestet und für gut befunden.
Java:
import java.io.File;
import java.io.IOException;

public class CmdTest
{
    public static void main(String[] args) throws IOException
    {
        ProcessBuilder pb = new ProcessBuilder( "cmd", "/k", "start" );
        pb.directory( new File( "C:\\test" ) );
        pb.start();
    }
}


Ach ja und für jene Beispiel-Kopierer:
Java:
import java.io.File;
import java.io.IOException;

public class CmdTest
{
    public static void main(String[] args) throws IOException
    {
        String laufwerk    = "c";
        String verzeichnis = "test";
        
        ProcessBuilder pb = new ProcessBuilder( "cmd", "/k", "start" );
        pb.directory( new File( laufwerk+":\\"+verzeichnis ) );
        pb.start();
    }
}
 
Java:
import java.io.File;
import java.io.IOException;

public class CmdTest
{
    public static void main(String[] args) throws IOException
    {
        ProcessBuilder pb = new ProcessBuilder( "cmd", "/k", "start" );
        pb.directory( new File( "C:\\test" ) );
        pb.start();
    }
}

Hey, das ist gut! Wieder etwas dazu gelernt. 🙂

VG ROlf
 

Zurück
Oben