Dos Befehle Ausführen mit STDOut und Rückgabewert

  • Hallo!

    Ich suche jetzt schon eine ganze Weile nach einer Möglichkeit, ein Dos Kommando zu starten, die Ausgabe mitzuschneiden und zusätzlich den Rückgabewert(Error-Code) zu bekommen.

    Arbeite ich mit RunWait, bekomme ich einen möglichen error-code,

    Arbeite ich mit Run, kann ich die Ausgaben STDOut und STDErr Protokollieren,

    aber bekomme ich beide Informationen?[Blockierte Grafik: http://www.autoit.de/wcf/images/smilies/confused.png]

    Bin für jeden Tipp dankbar ^^ .

    Einmal editiert, zuletzt von ALR (14. Dezember 2012 um 16:17)

  • Den Exitcode bekommst du via GetExitCodeProcess:

    [autoit]

    $hPID = Run(@ScriptDir & "\Run.exe", "", @SW_SHOW, BitOR($STDERR_CHILD, $STDOUT_CHILD))
    $hProcess = _WinAPI_OpenProcess(0x0400, 0, $hPID)

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

    ;Hier StdOut-Loop

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

    $iExitCode = _WinAPI_GetExitCodeProcess($hProcess)
    _WinAPI_CloseHandle($hProcess)

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

    Func _WinAPI_GetExitCodeProcess($hProcess)
    Local $aResult = DllCall("kernel32", "hwnd", "GetExitCodeProcess", "handle", $hProcess, "dword*", 0)
    If @error Or Not IsArray($aResult) Then Return SetError(@error, @extended, 0)
    Return $aResult[2]
    EndFunc ;==>_WinAPI_GetExitCodeProcess

    [/autoit]

    E

  • Alternativ kannst du auch

    Code
    %ERRORLEVEL%

    in eine Datei umleiten bzw. ausgeben lassen, aber die Lösung von eukalyptus ist um einiges schöner, auch wenn ich's nicht getestet habe.

  • Ich würde diese Lösung glatt für würdig halten in die Beschreibung zu "run" in der AutoIT-Hilfe als Beispiel aufgeführt zu werden. :thumbup: