Input/Output Allg. Befehle an die cmd.exe senden

maxil95

Mitglied
Hallo Zusammen,

leider bin ich nun schon seit einigen Tage auf der Suche nach einer Lösung für folgendes Problem:
Ich möchte Befehle aus einem Java Programm heraus direkt an die Windows Eingabe Konsole senden
wie z.B. "dir". Beim starten der der cmd.exe können ja direkt Befehle mit übergeben werden "Process cmdProcess = Runtime.getRuntime().exec("cmd /c" + "start" );" was auch funktioniert, nur bekomme ich es dann nicht hin, weiterhin einzelne Befehle an die cmd zu senden, so dass diese ausgeführt werden. Vielleicht hat ja jemand von euch eine Idee wie ich hier weiterkomme. Vorab danke für eure Hile!
Als Beispiel:

Java:
package BackUp_DB;

import java.io.*;
import java.lang.ProcessBuilder;

import javax.print.DocFlavor.INPUT_STREAM;

public class BackUp_DB {

	public static void main(String[] args) throws IOException 
	{
		
		//Erstellen von DB_Backup im Verzeichnis 
		File directory = new File ("C:...");
		
		//Prüfen ob das Verzeichnis bereits existiert
		if(directory.exists())
		{
			System.out.println("Verzeichnis "+directory+" ist bereits vorhanden!");
			
		}
		else
		{
			directory.mkdirs();
			if(directory.exists())
			{
				System.out.println("Verzeichnis "+directory+" wurde erstellt!");
			}
			else
			{
				System.out.println("Verzeichnis "+directory+" konnte nicht erstellt werden!");
			}
		}
			
				
		//CMD.exe starten
		Process cmdProcess = Runtime.getRuntime().exec("cmd /c" + "start" );
		
		
		// [COLOR="#FF0000"]Hier möchte ich nun versuchen die Befehle an die cmd zu senden[/COLOR]
		OutputStream stdin = cmdProcess.getOutputStream();
		InputStream stdout = cmdProcess.getInputStream();
		
		BufferedReader reader = new BufferedReader(new InputStreamReader(stdout));
		BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
		
		writer.write("dir\n");
		
		}
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
[OT]Bitte verwende in Zukunft für Java Code auch die Java-Tags![/OT]

Zu deinem Problem:

Wenn ich mich richtig erinnere schreibt der Writer zwar richtig, aber woher soll man wissen das die Eingabe so schon beendet ist?
Probiere es mit den Aufruf von "writer.flush()".
 

maxil95

Mitglied
Hi Joose,

vorab danke für deine Hilfe, aber leider hat es nicht funktioniert.
Ich bekomme keine Ausgabe wenn die Kommandozeile (dos) geöffnet wird.
Vielleicht hast du ja noch eine andere Idee. ich weiß leider langsam nicht mehr weiter was ich noch probieren kann.
 

arilou

Bekanntes Mitglied
Also erst mal muss zwischen "/c" und "start" ein Leerzeichen, denn cmd.exe versteht "/cstart" nicht.
Java:
Process cmdProcess = Runtime.getRuntime().exec("cmd /c" + " " + "start" );
Dann funktioniert 'start' sehr viel zuverlässiger, wenn man ihm erst mal einen 'Fensternamen' mitgibt, und sei's ein leerer:
Java:
Process cmdProcess = Runtime.getRuntime().exec("cmd /c" + " " + "start \"\"" );
Und wie's danach mit Befehlen und Parametern weitergeht, zeigt dir eine MS-DOS-Eingabekonsole, wenn du mal in einer
Code:
start /?
eingibst.
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Ich kann dir sagen, dass was du da machen willst so nicht funktionieren kann.

Die Reihenfolge ist die:

Java(exec(...)) -> Process(cmd.exe /c start) -> command prompt

Du erhälst den In/OuputStream von dem Process der dir den command prompt geöffnet hat und nicht von dem geöffneten prompt.
 

arilou

Bekanntes Mitglied
Richtig; aufrufen müsstest du z.B.
Java:
Process cmdProcess = Runtime.getRuntime().exec("cmd /c start \"\" dir" );
(Sorry, auf den Rest deines Progis weiter unten
hab' ich nicht so geachtet, da das "cmd "... schon falsch war.)

In diesem Fall sollte eigentlich das "start \"\"" auch wegfallen können.
 
Zuletzt bearbeitet:

maxil95

Mitglied
Danke,

das Funktioniert, nur möchte ich nicht in
Java:
Process cmdProcess = Runtime.getRuntime().exec("cmd /c" +" "+ "start " + commandSend );
den Befehl übergeben, sondern direkt durch eine Variable deren Inhalt angepasst bzw. geändert werden kann, so dass verschiedenste Befehle nacheinander an die cmd gesendet werden können.
Den Befehl start /? kannte ich nicht und zeigt mir leider im Moment auch nicht die Lösung zu meinem Problem oder ich sehe sie nicht. Ich weiß ja nicht ob ich gerade irgendwie ein Brett vorm Kopf habe!!!!!!;)
 
Zuletzt bearbeitet:

arilou

Bekanntes Mitglied
Ja, hast du: Was Benutzer:Flown geantwortet hat, ist maßgebend.

Aber evtl. klappt es, wenn du stattdessen
Java:
.exec("cmd");
oder
Java:
.exec("cmd /k ersterBefehl");
aufrufst, dann wartet die Konsole, und du kannst ihr über den stdin -Stream "Tastatureingaben" senden. Nur wirst du sie dann nicht als Fenster sehen, sondern sie bleibt "unsichtbar".
 
Zuletzt bearbeitet:

arilou

Bekanntes Mitglied
Also sowas:
Java:
import java.io.* ;

public class MyCmd
{
  public static OutputStream stdin ;
  public static InputStream stdout ;
  public static InputStream stderr ;

  public static void main( String[] args ) throws IOException ,
      InterruptedException
  {
    Process p ;
    BufferedWriter bw ;
    OutputStreamWriter osw ;
    Thread t ;

    p = Runtime.getRuntime().exec( "cmd" ) ;
    stdin = p.getOutputStream() ;
    stdout = p.getInputStream() ;
    stderr = p.getErrorStream() ;
    bw = new BufferedWriter( osw = new OutputStreamWriter( stdin ) ) ;
    t = new Thread() {
      @Override
      public void run()
      {
        while( !interrupted() )
        {
          try
          {
            while( MyCmd.stdout.available() > 0 )
            {
              System.out.print( (char) (stdout.read()) ) ;
            } // end while
            while( MyCmd.stderr.available() > 0 )
            {
              System.err.print( (char) (stderr.read()) ) ;
            } // end while
          }
          catch( IOException e )
          {
            ;
          }
        } // end while( not interrupted )
      }
    } ;

    t.start() ;

    bw.write( "dir" ) ;
    bw.newLine() ;
    bw.flush() ;

    bw.write( "exit" );
    bw.newLine() ;
    bw.flush() ;
    
    p.waitFor() ;
    t.interrupt() ;
    bw.close() ;
    osw.close() ;
  }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Allg. Variable deklarieren Java Basics - Anfänger-Themen 8
N allg. Frage Java Basics - Anfänger-Themen 9
P allg. Baum aus Liste Java Basics - Anfänger-Themen 2
RudiRüssel Befehle - Maschinenprogramme Java Basics - Anfänger-Themen 6
H Befehle in einem Menü aktivieren Java Basics - Anfänger-Themen 1
D import Befehle Java Basics - Anfänger-Themen 3
F Linux Befehle zum Übersetzen Java Basics - Anfänger-Themen 1
L Linux Befehle unter Windows in Eclipse ausführen Java Basics - Anfänger-Themen 3
D Erste Schritte Weitere Befehle implementieren Java Basics - Anfänger-Themen 27
T befehle unterschiedlicher anzahl an strings wiedergeben Java Basics - Anfänger-Themen 2
RowdyN Methoden Befehle in zufälliger Reihenfolge ausführen lassen Java Basics - Anfänger-Themen 5
D Input/Output Mehrere Befehle nacheinander ausführen Java Basics - Anfänger-Themen 20
L Text/Befehle zu Programmen senden Java Basics - Anfänger-Themen 1
C Java und "normale" Befehle Java Basics - Anfänger-Themen 3
N Mit Java Befehle auf Konsole ausführen Java Basics - Anfänger-Themen 4
F alle 100ms Befehle ausführen Java Basics - Anfänger-Themen 26
S Befehle in ProcessBuilder nachschieben Java Basics - Anfänger-Themen 2
J Befehle aus anderen Klassen ausführen Java Basics - Anfänger-Themen 8
F Befehle von Java class ausführen Java Basics - Anfänger-Themen 3
F Befehle wiederholen Java Basics - Anfänger-Themen 7
B Threads Geschwindigkeit der Befehle auf verschiedenen PCs gleich machen Java Basics - Anfänger-Themen 3
G Kombination zweier Befehle (Preis festlegen & Rabatt berechnen) Java Basics - Anfänger-Themen 3
D Input/Output Stringbuffer Befehle bei Konvertierung in String Java Basics - Anfänger-Themen 19
C Nach Java-Installation sind Befehle erfolglos Java Basics - Anfänger-Themen 4
J Unklare Befehle Java Basics - Anfänger-Themen 4
K .bat Dateien starten, Ausgabe einlesen und Befehle übergeben Java Basics - Anfänger-Themen 32
H Befehle an andere Programme Java Basics - Anfänger-Themen 8
M Befehle der Eingabeaufforderung Java Basics - Anfänger-Themen 2
S return(Bedingung) ? [mehrere Befehle] Java Basics - Anfänger-Themen 5
M Umgebungsvariable gesetzt, aber nicht alle Befehle ausführbar Java Basics - Anfänger-Themen 6
M TextWrangler/VIM- Manche Befehle werden nicht farblich hervorgehoben Java Basics - Anfänger-Themen 3
S Mehrere Return-Befehle in einer Methode Java Basics - Anfänger-Themen 23
G Eigene Klasse für externe Befehle - Warten auf Prozesse Java Basics - Anfänger-Themen 6
N 2 Befehle zu einem machen Java Basics - Anfänger-Themen 10
K Shell Befehle mit Java aufrufen Java Basics - Anfänger-Themen 5
G CMD Befehle übergeben Java Basics - Anfänger-Themen 2
J Java Konsolenprogramm Befehle(Optionen) übergeben Java Basics - Anfänger-Themen 7
Blackskyliner Befehle an einen Thread senden? Java Basics - Anfänger-Themen 2
K Wieviele Befehle pro .java Datei Java Basics - Anfänger-Themen 4
C Befehle finden / Befehle richtig suchen Java Basics - Anfänger-Themen 5
E Befehle Java Basics - Anfänger-Themen 3
D MS Dos Befehle mit java Java Basics - Anfänger-Themen 3
G Falsche Java befehle, doch was ist falsch? Java Basics - Anfänger-Themen 9
D Win98 erkennt keine java Befehle.Umgebungsvariablen falsch? Java Basics - Anfänger-Themen 7
B Alt-Befehle Java Basics - Anfänger-Themen 4
C System.exit(int) und andere ähnliche Befehle Java Basics - Anfänger-Themen 5
R MS-DOS-Befehle ausführen Java Basics - Anfänger-Themen 11
S Befehle an externe Programme Java Basics - Anfänger-Themen 4
L Dos Befehle via Java Java Basics - Anfänger-Themen 4
Z E-Mail senden mit Bibliotheken Java Basics - Anfänger-Themen 1
C Bytearray senden via SerialPort Java Basics - Anfänger-Themen 7
K Mail senden, nachdem Anwendung beendet wurde (gleich wie) Java Basics - Anfänger-Themen 4
B Java Mail -> Mail senden, ist aber nich in IMAP unter "Gesendet" Java Basics - Anfänger-Themen 3
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
R Antwort vom Server an mehreren Clients senden Java Basics - Anfänger-Themen 3
G Email senden MailDev Java Basics - Anfänger-Themen 13
N Erste Schritte Dedicated Server \ Senden und Empfangen von Daten/Befehlen Java Basics - Anfänger-Themen 2
T Datei seriell senden Java Basics - Anfänger-Themen 42
N Daten/Formular per POST an Firefox/Browser senden Java Basics - Anfänger-Themen 7
F String zu einem Server senden Java Basics - Anfänger-Themen 4
R Daten via Post an php Script senden Java Basics - Anfänger-Themen 1
fLooojava Bluetooth Projekt - Problem beim mehrmaligen Senden Java Basics - Anfänger-Themen 5
M Int wert in ActionEvent senden Java Basics - Anfänger-Themen 4
A Pfadangabe Datei senden Java Basics - Anfänger-Themen 14
S Hilfe!! Senden eine Bestätigungsmail Java Basics - Anfänger-Themen 3
C "Signal" senden Java Basics - Anfänger-Themen 2
J Funktion um JSON per Post senden/emfangen Java Basics - Anfänger-Themen 3
H Objekt zu groß zum Senden? Java Basics - Anfänger-Themen 6
E Senden von Objects an Client. Variablenwerte kommen nicht an Java Basics - Anfänger-Themen 5
P Probleme bei senden eines Strings übers Netzwerk Java Basics - Anfänger-Themen 4
E SMS senden Java Basics - Anfänger-Themen 3
U E-Mails mittels Java senden. Java Basics - Anfänger-Themen 2
M bild mit httpPost senden Java Basics - Anfänger-Themen 8
B Object an Server senden, Server antwortet mit objekt? Java Basics - Anfänger-Themen 7
C Little Endianess - Senden von Daten Java Basics - Anfänger-Themen 2
M String senden/empfangen mit PHP funktioniert nicht Java Basics - Anfänger-Themen 2
T Daten über Com Port senden Java Basics - Anfänger-Themen 2
G Datei an PHP Script senden und speichern Java Basics - Anfänger-Themen 2
D Daten an Formular senden Java Basics - Anfänger-Themen 4
T Tastatur Tasten Senden Java Basics - Anfänger-Themen 4
M Mail senden - Problem connect to SMTP host Java Basics - Anfänger-Themen 5
M Bitmuster eines Strings über RS232 senden Java Basics - Anfänger-Themen 5
S 2x per GET senden Java Basics - Anfänger-Themen 6
B Bild/Datei von einem Server an einen Client senden Java Basics - Anfänger-Themen 6
M Mails zum Server senden der Authentisierung benötigt Java Basics - Anfänger-Themen 3
H String mit UDP senden Java Basics - Anfänger-Themen 10
M Warum kann man dem Thread kein notify senden? Java Basics - Anfänger-Themen 15
G String zur RS232 senden und mit cr abschließen! Java Basics - Anfänger-Themen 4
O Post senden an php script. Java Basics - Anfänger-Themen 20
G Post-Methode senden Java Basics - Anfänger-Themen 4
C string über server/client verbindung senden ? Java Basics - Anfänger-Themen 4
H Befehl zum FTP-Server senden?? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben