EXIT Code von Batch mit AutoIT verarbeiten

  • Hallo,

    ich kenne mich mit AutoIt derzeit noch überhaupt nicht aus und habe eine kleine Frage.

    Ich verteile diverse Softwarepakete über Batches (CMDs). Diese Batches liefern einen Exit/Error-Code an ein übergeordnetes System (LANDesk), um Auswertungen zu machen oder einfach zu sehen, ob der Installationstask auch auf allen Rechnern durchlaufen wurde.

    Damit nicht jeder an den Source-Dateien der Batches (die Programmdateien und die Batch selbst) herumfummeln kann möchte ich daraus eine EXE machen, die aber weiterhin die Exit/Error-Codes sendet.

    Jetzt meine Frage: Ist es möglich mit Hilfe von AutoIt einen Exit-Code einer Batch "aufzufangen" und weiterzuleiten?
    (Ich weiss, ich könnte auch alle Batche nach AutoIt konvertieren, allerdings wäre ich dann noch ein paar Monate beschäftigt und es geht wie immer um eine Lösung ASAP... 8|

    Hier ist ein kleines Batchbeispiel, es soll ein Verzeichnis erstellen, wenn es schon da ist bringt es einen Fehler und dieser soll dann als Exit-Code an das übergeordnete System geschickt werden.
    Die Erstellung der Log-datei dient nur dem Test... :)
    Der Befehl %LDDIR%\sdclient.exe" /msg= sendet eine Meldung an LANDesk, der abschließende Befehl EXIT /B %ResultCode% sendet den Errorcode an LANDesk (0 bedeutet "erfolgreich", alles andere bedeuted Fehler)

    Ach ja, die Batch funktioniert so wie sie ist, nur wenn ich sie mit Hilfe von Tools, wie 7zip, Batch2Exe oder auch Packagebuilder, zu einer EXE mache, werden die Exitcodes nicht weitergeleitet.

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.

    Einmal editiert, zuletzt von ahe (12. April 2008 um 00:22)

  • Hallo Mega,

    wenn ich meine Batch mit Runwait starte sehe ich im SciTE4AutoIt3 im Logfenster die folgenden Zeilen:

    Code
    >"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "d:\autoittest.au3"
    >Exit code: 0Time: 0.662

    In meinem Logfile steht als Errorcode 1!

    Jetzt habe ich daraus eine EXE gemacht und diese verteilt. Der Exitcode wird nicht "durchgereicht"...

    Der "Source":

    Code
    RunWait("c:\temp\LDMS_Packages\Test\test.cmd")

    Ach ja, wie kann ich die Umgebungsvariable %temp%, oder auch andere, verwenden? Wenn ich %temp% anstelle von c:\temp verwende, bekomme ich einen Fehler:

    Code
    >"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "d:\autoittest.au3"	
    D:\autoittest.au3 (1) : ==> Unable to execute the external program.: 
    RunWait("%temp%\LDMS_Packages\Test\test.cmd") 
    Das System kann die angegebene Datei nicht finden.

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.

  • Hallo progandy,

    danke für den Hinweis, aber der Exit Code immer noch 0 anstelle von 1.

    Der folgende Source liefert mit die "0" zurück, anstelle von "1":

    Code
    $code = RunWait(@TempDir & "\ldms_packages\test\test.cmd")
    MsgBox(1, "Der Error-Code", $code)
    Exit $code

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.

  • Gleicher Effekt...

    Code
    $code = ShellExecuteWait(@TempDir & "\ldms_packages\test\test.cmd")
    MsgBox(0, "Der Error-Code", $code)
    
    
    Exit $code

    Ich habe spasseshalber den Exit Code in der Batch manuell verändert (sowohl negative, als auch positive Zahl), ohne Effekt. Der Wert ist immer "0".

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.

    • Offizieller Beitrag

    Hallo,

    das liegt an dem Schalter /B nach dem Exit! Ohne den Schalter wird der Exitcode zurückgegeben!

  • Vielen Dank Bernd. :thumbup:
    (auch Dank an progandy und mega)

    Ich war schon am Verzweifeln, da in allen Forenbeiträgen (auch den englischen) die Lösung identisch war, aber bei mir nicht funktionierte... (wenn man halt die Kommandozeilen-Online-Hilfe nicht richtig liest... :) :


    Ich habe aber auch eben eine Alternative gefunden, die zwar jetzt überflüssig ist, aber vielleicht noch für andere Zwecke gebraucht werden kann.
    Eine EXE erstellen mit dem Code

    [autoit]

    Exit (1)

    [/autoit]


    und anschließend in der Batch an dem entsprechenden Ausstiegspunkt aufrufen.
    (Idee kam u. a. von hier: http://www.autoitscript.com/forum/index.php?showtopic=6348&hl=errorlevel )

    Jetzt änder' ich aber erst einmal meine Batches... :)

    mfg
    Axel

    There exist 10 different kind of people on earth.
    Those who understand binary, and those who don't.