Informationen aus CMD auslesen

  • Hallo leute,

    hier gehts um ne frage von mir die mir schon länger unter den Fingernägeln brennt
    1. wie kann man mehrzeilige DOS-Befehle ausführen (mit _RunDos einfach untereinander schreiben haut nicht) und am besten noch versteckt
    2. wie kann man informationen aus einem _RunDos-Befehl bekommen, also wenn ich z.B. net help schreib wie kann ich das vom DOS Fenster zurückgegebene auslesen?

    Padmak

    Einmal editiert, zuletzt von Padmak (27. Dezember 2008 um 21:18)

  • Danke schonmal

    aber warum funktioniert das hier nicht?

    [autoit]


    #include <Constants.au3>
    $read = _CMDRead("echo Test")
    MsgBox(0 ,"", $read)

    [/autoit][autoit][/autoit][autoit]

    Func _CMDRead($command)
    $CMD = Run(@ComSpec & " /c " & $command, @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    $line = StdoutRead($CMD)
    Sleep(1000)
    EndFunc

    [/autoit]


    er gibt immer 0 zurück ?( ?(
    und kann irgendjemand etwas zu 1. sagen?

    Padmak

    Einmal editiert, zuletzt von Padmak (27. Dezember 2008 um 19:22)

  • So ungefähr:

    Spoiler anzeigen
    [autoit]

    #include <Constants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $read = _CMDRead("echo Test")
    MsgBox(0 ,"", $read)

    [/autoit] [autoit][/autoit] [autoit]

    Func _CMDRead($command)
    Local $line

    $CMD = Run(@ComSpec & " /c " & $command, @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $line &= StdoutRead($CMD)
    If @error Then ExitLoop
    Wend
    Return $line
    EndFunc

    [/autoit]

    Deine "Funktion" ist eigentlich eine Prozedur (es wird nur Code ausgeführt aber nix zurückgegeben)

  • danke^^
    zwischenzeitlich hab ichs selbst irgenwie hingebastelt (hatte aber keine ahnung was ich eig gemacht hab :D)
    da hast du mir schon geholfen
    sieht jetzt so aus:

    [autoit]


    $read = _CMDRead("echo Test")
    MsgBox(0, "", $read)

    [/autoit][autoit][/autoit][autoit]

    Func _CMDRead($command)
    Local $CMDRead

    $CMD = Run(@ComSpec & " /c " & $command, @SystemDir, @SW_HIDE, $STDOUT_CHILD)

    While 1
    $CMDRead &= StdoutRead($CMD)
    If @error Then ExitLoop
    WEnd
    Return SetError(@error, @extended, $CMDRead)
    EndFunc

    [/autoit]

    darf ich das als udf veröffentlichen (ich frag weil du nen großteil davon gemacht hast bzw mir extrem geholfen hast) ???
    ich bau auch noch eigene Funktionen ein -> jetzt hab ich das UDF-Prinzip verstanden :D
    Padmak

  • 1. weis ich nicht ob meine Lösung die beste ist :P
    ich hab da noch nie mit gearbeitet und einfach was aus der Hilfe zusammengebastelt.

    2. Was machst du da mit Seterror?

    Zitat

    Manually set the value of the @error macro.

    Aber @error willst du doch auch nur benutzen, wenn ein Fehler auftritt. Das hat eingentlich keinen Sinn, return alleine langt.

    Ansonsten kannst du sie benutzen, aber eine tolle Funktion, die man unbedingt veröffentlichen muss ist das nicht, aber mach wie du denkst :D.

    Feel free to use :P

  • hupps des mit seterror war noch die alte version^^

    Zitat

    Ansonsten kannst du sie benutzen, aber eine tolle Funktion, die man unbedingt veröffentlichen muss ist das nicht, aber mach wie du denkst :D.

    8| danke -_-

    ich will nur auch mal ne selbstgeschriebene UDF in der Signatur haben :D:D
    ausserdem braucht einer dem ich helfe so eine Funktion^^
    deshalb hab ich mir gedacht "machst doch mal was"

    Zitat

    1. wie kann man mehrzeilige DOS-Befehle ausführen (mit _RunDos einfach untereinander schreiben haut nicht) und am besten noch versteckt

    Dazu weißt aba leider nix oda?

    Danke nochmal

    Padmak

  • Hallo Padmak,

    das mit den mehrzeiligen Dos-Befehlen würde ich so lösen:

    im Temp-Ordner eine .bat Datei erstellen
    Befehle mit FilewriteLine in die Batch schreiben
    und dann diese mit RunWait und Parameter @SW_HIDE starten

    ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • danke schnuffel ist eigentlich eine gute idee
    ich weiß auch schon wie ich das in meine UDF einbaue *g*

    Danke an alle

    Padmak