cmd.exe mehrere Befehle ausführen und Antwortzeilen lesen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Snaptu.

    cmd.exe mehrere Befehle ausführen und Antwortzeilen lesen

    Hallo zusammen,

    ich schlage mich da mal wieder seid ein paar Tagen mit einem Thema herum. Vielleicht kennt hier jemand die Lösung und kann sie mir verständlich näherbringen.

    Ich möchte folgendes machen:
    1) Aus einer Formsanwendung heraus einen Button drücken
    2) dadurch wird ein cmd Fenster gestartet
    3) hier wird ein erster Befehl ausgeführt
    4) der Rückgabetext (Antwortzeilen des Befehls) wird in ein mehrzeiliges Label ausgelesen (Kann 1 Zeile oder auch 50 sein)
    5) es wird gewartet, bis dieser Befehl komplett abgearbeitet wurde
    6) Ein weiterer Befehl wird ausgeführt (Also Punkt 3-5 wird wiederholt)

    Nehmen wir mal ein einfaches Beispiel. Es soll 3x hintereinander im cmd der Befehl "ping google.de" abgesetzt werden und alle Ergebnisse im Label dargestellt werden.
    Nein, ich möchte einen anderen Befehl absetzen. Ping ist nur ein Beispiel, da mehrere Antwortzeilen kommen^^

    Folgende Beispiele habe ich unter anderem gefunden:
    [VB 2010] CMD Befehl ausführen und Rückgabe einem string zuweißen.
    social.msdn.microsoft.com/Foru…4-4343-a9ec-61080b05acb4/
    social.technet.microsoft.com/w…rom-visual-basic-net.aspx

    Egal wie ich es angehe, es funktioniert nicht !!!
    Dabei sind die Beispiele schon recht detailliert ....

    Gibt es jemanden, der mir dafür ein kleines Beispiel zusammenbastelt? oder alternativ erklärt wie ich es hinbekomme?

    Danke,
    DragonRE

    DragonRE schrieb:

    Egal wie ich es angehe, es funktioniert nicht
    Mit welchem Code, welches Programm rufst Du auf?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Woaw, erst einmal Danke für Eure Antworten.

    @ Snaptu:
    Wird sofort erledigt. Mal sehen, was ich Deinem Link entnehmen kann.

    @ ErfinderDesRades:
    Verdächtig, verdächtig ... Huuuh ... ;)
    Also dann möchte ich den Verdacht doch mal entkräften^^

    @ RodFromGermany & all:
    Ich möchte den Befehl: "ug_import.exe", bzw. "ug_clone.exe" ausführen. Vermute jedoch, dass dieses Programm hier kaum jemand kennt.
    Es handelt sich hierbei um ein Untergrogramm einer Industriesoftware, womit man CAD Daten als Massenimport in eine Datenbank einlesen kann.
    Das ist jedoch ein anderes Thema!
    Ping als Beispiel ist da ausreichend, da ähnlich mehrere Antwortzeilen geliefert werden. Einziger Unterschied, Ping liefert eine stabile Anzahl Antwortzeilen. Oben benanntes Programm nicht.

    Gruß,
    DragonRE
    OK, ich habe meinen letzten Post mal benutzt, um ihn per Edit neu zu schreiben.
    Ich komme weiter, aber es bleiben Fragen offen.

    Zusätzlich habe ich eine gute Seite gefunden, die das Drum-Herum anschaulich erklärt. Falls mal wieder jemand sucht, anbei der Link:
    codeproject.com/Articles/18577…Input-Output-of-an-applic

    Es werden nun genauso wie ich es mir vorstelle mehrere Befehle nacheinander ausgeführt UND die Ergebnisse ins Direktfenster geschrieben.
    Soweit alles Klasse.

    Allerdings irritiert mich noch ein letzter Umstand:
    Das cmd Fenster wird geöffnet, bleibt wärend des Durchlaufes jedoch komplett schwarz.
    Ist es noch möglich dass dort die Befehlsabarbeitung dargestellt wird?
    Macht ja keinen Sinn, wenn das cmd offen ist, aber nichts dargestellt wird.

    Habe ich hier einen Denkfehler, oder einfach etwas im Code vergessen?

    Danke für einen weiteren Hinweis.

    Gruß,
    DragonRE


    Mein aktueller Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. 'Will hold all of the text
    4. Dim Output As String
    5. 'Create a new process object
    6. Using P As New Process()
    7. 'Set the script to run the standard command shell
    8. P.StartInfo.FileName = "cmd.exe"
    9. ' Da ich mehrere Commandozeilen an das CMD Uebergeben moechte lasse ich das Startargument mal weg
    10. ' Set Startargument
    11. 'P.StartInfo.Arguments = "/c ping google.de"
    12. P.StartInfo.Arguments = "/k echo off"
    13. 'Required to redirect output, don't both worrying what it means
    14. P.StartInfo.UseShellExecute = False
    15. 'Tell the system that you want to read/write to it
    16. P.StartInfo.RedirectStandardOutput = True
    17. P.StartInfo.RedirectStandardInput = True
    18. 'Start your cmd
    19. P.Start()
    20. 'Send your first command
    21. 'P.StandardInput.WriteLine("/K echo on")
    22. P.StandardInput.WriteLine("ping google.de")
    23. 'Send your second command
    24. P.StandardInput.WriteLine("ping google.com")
    25. 'Very important, send the "exit" command otherwise STDOUT will never close the stream
    26. P.StandardInput.WriteLine("exit")
    27. 'Read the entire stream
    28. Output = P.StandardOutput.ReadToEnd()
    29. 'Wait until the cmd is done running
    30. P.WaitForExit()
    31. End Using
    32. 'Do something with the output
    33. Trace.WriteLine(Output)
    34. End Sub
    35. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DragonRE“ ()

    Ich habe jetzt nur deinen Code gesehen und gesehen, dass du versuchst Pings auszuwerten. -> Wieso?
    Es gibt eine Ping-Klasse die du ohne den ganzen Brainfuck benutzen kannst.
    Die Konsole bleibt schwarz weil der Outputstream umgeleitet wird. Kannste nix machen.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Du schaltest ja auf Echo off, wie willst da etwas sehen ;)
    Wenn du das cmd fenster garnicht mehr braucht gibt es auch eine
    Möglichkeit es ganz zu verstecken.

    And die anderen: Ich denke diese Pings macht er nur zum testen nachher führt er dort seine Programme aus.

    Wobei ich eigentlich die Programme gleich per VB.net starten würde dann stehen alle deine Befehle und Funktionen
    in einem Programm.
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.