Mehrzeiligen cmd ausführen

  • VB.NET

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von powachill.

    Mehrzeiligen cmd ausführen

    Hallo,

    Ich versuche einen mehrzeiligen cmd mit vb .net auszuführen.

    Dieser code funktioniert:

    Quellcode

    1. Shell("cmd /k " & "ping web.de", AppWinStyle.NormalFocus)


    Problem ist jetzt wie ich die nächste zeile im selben cmd fenster ausführen kann.
    Ich habe es einfach mal mit vbnewline probiert, etwa so:

    Quellcode

    1. Shell("cmd /k " & "ping web.de" & vbnewline & "ping google.com", AppWinStyle.NormalFocus)


    Doch dann macht er nur die erste zeile und ignoriert die zweite einfach.

    Also würde mich freuen wenn mir da wär weiterhelfen könnte!

    Grüße :)
    Erstens mal Shell() ist veraltet. Zweitens würde ich es mit zwei Shell() Methoden versuchen.

    Tipp: Schau dir mal My.Computer.Network.Ping an.

    singu schrieb:

    Wieso machst du das ganze nicht über eine Batch-Datei?
    Fände ich hier eigentlich noch am sinnvollsten...
    Dann nimm halt den Shell() :wacko:

    Du musst aber pro "Zeile Batchcode" auch einen Shell() nehmen.
    Also z.b.:

    VB.NET-Quellcode

    1. Shell("echo Befehl1")
    2. Shell("echo Befehl2")
    3. Shell("echo Befehl3")
    4. 'usw...
    Dann wird sie um eine Batch nicht herumkommen, oder?

    EDIT: Oder mache eine Console Application und nimm nicht die CMD Codes sondern .NET.
    wir sind hier in VB 2010, also verwerft bitte mal ganz schnell Shell :P
    Es gibt hier was ganz geschicktes: Die Process Klasse, darüber startest du den Prozess cmd.exe, bei Process.Start gibst du als ersten und einzigen Parameter eine Instanz der ProcessStartInfo Klasse an, diese erzeugst du zuvor mit New, bei dieser Instanz musst du die Eigenschaft RedirectStandardInput/Output auf True setzen...

    Process.Start ist eine Funktion, welche dir den gestarteten Prozess zurückgibt, diesen Wert speicherst du einfach in einer Variable,
    über diese Variable kannst du dann die Streams StandardInput und StandardOutput ansteuern, über einen IO.StreamReader und einen StreamWriter kannst du in diese Streams schreiben lassen.
    Mit StandardInput schreibst du direkt in die Konsole und mit StandardOutput empfängst du(wenn du willst) die zurückgegebenen Werte, dies hat auch noch den Vorteil, dass du es Unsichtbar und ohne extra Datei ausführen lassen kannst...

    Edit:einer war ja drinne :P(ich habs irwie geahnt^^, aber ich wollte es ausführlich schreiben, jedoch keinen C&P Code^^)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

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

    Shell ist aber viel besser da kürzer.

    Zum beispiel wenn ich ein versteckten process starten möchte:

    VB.NET-Quellcode

    1. Shell("MyTextFile.txt", vbHide)


    und bei process.start wird das ein mega code.

    VB.NET-Quellcode

    1. Dim ProcessProperties As New ProcessStartInfo
    2. ProcessProperties.FileName = "notepad"
    3. ProcessProperties.Arguments = "myTextFile.txt"
    4. ProcessProperties.WindowStyle = ProcessWindowStyle.Hidden
    5. Dim myProcess As Process = Process.Start(ProcessProperties)
    kürzer <> besser
    Shell <> Managed
    Process-Klasse=Managed

    mal gucken wie lange es Shell noch gibt :P

    außerdem hast du mit der Process möglichkeit mehr Möglichkeiten(ansonsten darfste raten, wie es ohne diese auch noch geht->WinAPI, dann wirste merken, was mehr Code benötigt :P)...
    bei mehrzeiligen Befehlen/mehreren Befehlen ist die .Net Methode sogar noch performanter, da nur ein Prozess für alles verwendet wird und du das Ergebnsi bequem auslesen kannst...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Für dein Vorhaben ist sehr gut ein "batch" zu verwenden. Das hat schon MB-Tech erwähnt.
    Habe in anderen Foren Thraeds mit änlichen vorhaben gelesen, wird nur "batch" empfohlen.

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

    Hallo^^,

    ich weiss nicht ob ich jetzt schon als "Leichenschänder" bezeichnet werde, aber ich habe hier eine simple Lösung.
    (Ich habe das selbe Problem gehabt, stehe aber nun vor einem neuen ;) )

    Einfach ein "&" durch die Zeilenumbrüche ersetzen.

    bsp:

    VB.NET-Quellcode

    1. @echo off & echo hallo & pause>nul


    Ein Problem welches sich hier ergiebt ist aber folgendes:
    Man kann keine goto's verwenden :(

    z.B.:

    VB.NET-Quellcode

    1. @echo off & :1 & echo hallo & goto :1


    geht hier nicht. :/
    @echo off & 1 & echo hallo & goto 1

    jvbsl meinte das so:

    @echo off & :1 & echo hallo & goto 1

    In einer Batch Datei würde "goto :1" auch nicht funktionieren. :D

    PS:

    @echo off & _
    :1 & _
    echo hallo & _
    goto 1

    dürfte bei längeren Ketten übersichtlicher sein.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils