2016-06-30 9 views
1

Dieser Code scheint perfekt für viele, aber für mich input.readline gibt einfach null.Ich denke, weil es Ende der Konsole erreicht hat.Wie lese ich die Ausgabe oben.Alle Hilfe würde sehr geschätzt werden.Ausgabe von der Eingabeaufforderung Null zurück

+0

Wollen Sie sagen, dass nichts von der System.out.println (Ausgabe) ausgegeben wird, weil der Inhalt der Schleife nie ausgeführt wird, weil die Zeile als Null gelesen wird? Oder sagst du, dass der Ausdruck "null" ausdruckt? –

+0

@DavidFindlay Ja, es gibt nichts aus, da die Ausgabe null ist. –

+0

Ich habe mehrere Methoden gefunden, wie man den Befehl 'dir' und' netstat' in einer Eingabeaufforderung startet, aber nichts, was gezeigt hat, wie man die von dort kommende Ausgabe zurück in Java umleitet. –

Antwort

1

Haben Sie jemals darüber nachgedacht, was diese Zeile macht oder haben Sie mindestens eine Zeile in einem Eingabeaufforderungsfenster ausgeführt, nachdem Sie die ausgehenden Backslashes entfernt haben?

"cmd /c start cmd.exe /K \"cd c:/Windows/system32 && dir && netstat | Findstr \"ldap\"\"" 

Erster Befehl Prozess:

cmd /c startet einen neuen Befehlsprozess von Windows, die automatisch schließt, wenn alle Befehle beendet. Es gibt nur einen Befehl, der von diesem Befehlsprozess verarbeitet werden kann - start - der bei Erfolg nichts ausgibt.

Dies erklärt, warum Sie keine Ausgangszeilen erhalten, die von diesem Befehlsprozess aus der Java-Anwendung stammen.

Zweiter Befehl Prozess:

start startet einen neuen Befehlsprozess von Windows einen Befehl auszuführen. Der auszuführende Befehl lautet: cmd /K
Nachdem dieser Befehl ausgeführt wurde, wird der Befehlsprozess wie bei Verwendung von cmd /c geschlossen.

dritten Befehlsprozess:

cmd /K startet einen neuen Befehlsprozess das Eingabeaufforderungsfenster des aktuellen (zweiten) Windows-Eingabeverfahren unter Verwendung einer Befehlszeile mit mehreren Befehlen auszuführen, und die Eingabeaufforderungsfenster nach Befehl offen halten Zeilenausführung beendet.

Dieser dritte Befehlsprozess im zweiten Eingabeaufforderungsfenster gibt tatsächlich Zeilen aus, aber die Ausgabe dieses Befehlsprozesses wird von der Java-Anwendung nicht erfasst.

Es wäre notwendig, den Befehl zu verwenden, um den dritten Befehlsprozess zu beenden, der zum Schließen des Eingabeaufforderungsfensters führt, das bereits mit dem mit Befehl start gestarteten zweiten Befehlsprozess geöffnet wurde.

Da der Betreiber && und nicht nur &, der Befehl dir wird nur dann ausgeführt, wenn der Befehl cd vor erfolgreich war. Weitere Informationen zu & und && finden Sie unter Single line with multiple commands using Windows batch file. Der Befehl cd ohne Parameter /D kann das aktuelle Verzeichnis nicht ändern, wenn sich das aktuelle Laufwerk auf einem anderen Laufwerk befindet als das Laufwerk des Verzeichnisses, das als neues aktuelles Verzeichnis festgelegt werden soll.

cd wird hier nicht wirklich benötigt, wie auch dir die völlig nutzlos ist.

ich vorschlagen, zu verwenden:

"cmd.exe /C \"%SystemRoot%\\system32\\netstat.exe | %SystemRoot%\\system32\\findstr.exe /I /C:ldap\"" 

, die auf die Ausführungsergebnisse der

cmd.exe /C "%SystemRoot%\system32\netstat.exe | %SystemRoot%\system32\findstr.exe /I /C:ldap" 

Keine Zeile ausgegeben/if netstat Ausgänge keine Leitung zu STDOUT mit der Zeichenfolge ldap auf jeden Fall eingefangen Umgeleitet zu STDIN von findstr arbeitet hier als Filter.

Um die verwendeten Befehle und ihre Funktionsweise zu verstehen, öffnen Sie ein Eingabeaufforderungsfenster, führen Sie die folgenden Befehle aus und lesen Sie alle Hilfeseiten, die für jeden Befehl angezeigt werden, sorgfältig durch.

  • cd /?
  • cmd /?
  • dir /?
  • findstr /?
  • netstat /?
  • start /?

Und lesen Sie auch die Microsoft-Artikel Using command redirection operators.

+0

Diese Antwort verdient +100 – xenteros

0

Der Befehl Sie ausführen ist

cmd /c start cmd.exe /K \"cd c:/Window... 

Hinweis Sie cmd laufen und fragen sie start, laufen, die eine neue (andere) Konsolensitzung erstellt, in dem die nachfolgende Befehlsfolge ausgeführt wird. Die Ausgabe von start Befehl ist was Sie gerade lesen, und start druckt normalerweise nichts, was Sie gerade lesen.

Da Sie Ihre Befehlszeichenfolge in einer neuen Sitzung/einem neuen Fenster ausgeführt haben, wird dort die gewünschte Ausgabe angezeigt. Lassen Sie die start insgesamt aus, um die Ausgabe an Ihr Java-Programm zurückzugeben.

+0

. Vielen Dank für die Informationen, die ich versuchte, ohne Start aber zu verwenden es öffnete cmd.exe nicht selbst –