Return Code auswerten

  • Hallo,
    ich bin noch nicht so fit,möchte jedoch folgende Aufgabe mit Autoit lösen.

    Es sollen 2 bat. Dateien nacheinander ausgeführt werden, dannach soll ein Mausklick ausgeführt werden.

    Jedoch soll die 2. bat erst ausgefürt werden wenn die 1.bat den return code "0" geliefert hat und der Mausklick erst dann wenn der die 2. bat den return code "0" ausgegeben hat. (sonst Fehlermeldung)


    RunWait("C:\....1.bat")
    $Var = @error
    MsgBox(0,"", $Var)

    RunWait("C:\....2.bat")
    $Var = @error
    MsgBox(0,"", $Var)

    sleep(2000)

    MouseClick("left",200,500,2)

    Ist die vorgehensweise ok?
    Wenn nicht würde ich mich über ein paar Codezeilen sehr freuen!

    Danke!

  • Hallo BugFix,
    Danke für die schnelle Antwort!
    Ich nutze deshalb die bat weil einer exe ca 20 Parameter übergeben werde, und diese ständig angepasst werden müssen.
    So brauch ich nicht immer eine neue exe .

    Danke!

  • Hallo BugFix,
    habe eben den Code

    RunWait("C:\....1.bat")
    $Var = @error
    MsgBox(0,"", $Var)

    RunWait("C:\....2.bat")
    $Var = @error
    MsgBox(0,"", $Var)

    sleep(2000)

    MouseClick("left",200,500,2)

    mal ausprobiert.

    Wenn das Programm ausgeführt wurde kommt das Fenster mit der Meldung "0"
    dieses muß ich nun mit OK bestätigen.
    Ich wollte es aber so machen das das Programm durchläuft wenn Returncode "0" kommt und das Fenter nur erscheint wenn er ungleich "0" ist

    Gibt es dagür eine einfache Lösung?

    Danke!

    • Offizieller Beitrag

    Den Fehlerwert nicht anzeigen sondern auswerten.
    (Benutze bitte die AutoIt-Tags, macht den Code lesbarer)

    [autoit]

    RunWait("C:\....1.bat")
    If Not @error Then
    RunWait("C:\....2.bat")
    If Not @error Then
    sleep(2000)
    MouseClick("left",200,500,2)
    Else
    MsgBox(0, 'Fehler', 'Fehler BAT_2')
    EndIf
    Else
    MsgBox(0, 'Fehler', 'Fehler BAT_1')
    EndIf

    [/autoit]


    Da RunWait im Fehlerfall 0 zurückgibt, läßt sich das auch etwas vereinfachen:

    [autoit]

    If RunWait("C:\....1.bat") Then
    If RunWait("C:\....2.bat") Then
    sleep(2000)
    MouseClick("left",200,500,2)
    Else
    MsgBox(0, 'Fehler', 'Fehler BAT_2')
    EndIf
    Else
    MsgBox(0, 'Fehler', 'Fehler BAT_1')
    EndIf

    [/autoit]
  • Hallo BugFix
    danke für das Beispiel.
    Ich habe es mit der Abfrage ausprobiert, anscheinend gibt mein aufgerufenes Programm kein Return Code aus. (es kommt jedesmal die Fehlermeldung trotz erfolgreich ausgeführtem Befehl)

    Habe jetzt

    RunWait
    $Var =error

    eingebaut

    Das Programm läuft soweit.
    Ich muß jedoch noch eine Endlosschleife einbauen ab While True bis zum Ende bekomme es aber nicht hin!

    Habe keinen Windos Rechner am Netz habe Dir die Datei mal angehangen.

    Danke für deine Hilfe sogar an Silvester!

    Gruß
    Sonyman

  • du hast doch eine endlosschleife von while true bis zum ende???


    Spoiler anzeigen
    [autoit]

    $drive=InputBox("ROBOTIC LAUFWERK","Laufwerksbuchstaben eingeben","H:")
    HotKeySet("{ESC}","_exit")
    RunWait("C:\Calibration.bat");Calibration der Robotic
    $Var =@error
    sleep(1000)
    RunWait("C:\First_Load.bat");Laden der 1. Disc
    $Var =@error

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

    While True
    $status=DriveStatus($drive)
    If $status = "NOTREADY" Then _next();warten bis Tray open
    sleep(1000)
    WEnd

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

    Func _next()
    RunWait("C:\Unload.bat");entladen der gebrannten Disc
    $Var =@error
    sleep(2000)
    RunWait("C:\Load.bat");laden einer leeren Disc
    $Var =@error
    Sleep(2000)
    MouseClick("left",200,500,2);"legen Sie eine leere Disc ein" ->OK Klicken
    Do
    Sleep(1000)
    Until $status <> "NOTREADY"
    EndFunc

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

    Func _exit()
    Exit
    EndFunc

    [/autoit]


    und kann es sein das diese beiden zeilen das cd laufwerk öffnen und schließen?

    [autoit]

    RunWait("C:\Unload.bat");entladen der gebrannten Disc
    RunWait("C:\Load.bat");laden einer leeren Disc

    [/autoit]

    das würde nämlich mit autoit befehlen leichter gehen^^

  • Hallo Schnitzel,
    Zur Endlosschleife.
    Leider läuft das Prog. nur 1x Durch! (jedoch ohne Fehler)

    Habe ich was vergessen???

    Zitat

    und kann es sein das diese beiden zeilen das cd laufwerk öffnen und schließen?

    Nein hier wird ein Script gestartet das nicht nur das Tray steuert, sondern auch die Robotic (am Com Port)

    Zur Funktion:

    Nach der Abfrage des Laufwerksbuchstaben wird die Robotic Calibriert nun wird die 1. CD eingelegt.
    Das Brennprogramm wird nun gestartet und die 1. CD wird beschrieben.
    Nach dem Brennen wird die CD vom Brennprog. ausgeworfen.
    Nun soll die CD entnommen und eine Neue eingelegt werden (Inhalt der While True Schleife)
    Das solle nun so weitergehen bis die CD alle sind oder, durch ESC abgebrochen wird.

    Wie gesagt irgendwoooo ist noch ein Fehler
    8|

    Gruß
    Sonyman

  • Deine Schleife funktioniert nicht, da sich $status in Zeile 23-25 nicht ändert. Einfach diese 3 Zeilen entfernen und es sollte funktionieren.

    Jedoch soll die 2. bat erst ausgefürt werden wenn die 1.bat den return code "0" geliefert hat und der Mausklick erst dann wenn der die 2. bat den return code "0" ausgegeben hat. (sonst Fehlermeldung)


    Setzt deine .bat überhaupt einen return code oder nur die Exe, die du aufrufst? Den Rückgabewert der Exe erhältst du in AutoIt nicht, wenn di .bat ihn nicht weitergibt.


    Ich nutze deshalb die bat weil einer exe ca 20 Parameter übergeben werde, und diese ständig angepasst werden müssen.
    So brauch ich nicht immer eine neue exe .


    Das geht sicher auch direkt mit AutoIt ;) Die Parameter könntest du dann z.B. über eine Ini einlesen.

  • DANKE progandy!
    Was soll ich sagen es funktioniert nun!
    Super !!
    Zum testen habe ich noch keine bat ausgeführt sondern direkt die exe mit parametern in AutoIt.
    Das auswerten der Returncodes klappt irgendwie nicht.
    RunWait funktioniert aber sehr gut!
    Der nächste Schritt wird erst dann gestartet wenn die Robotic fertig ist

    Werde nun das Script erstmal testen und dann nochweiter verfeinern!

    Nochmals Danke für deine Hilfe!

    Gruß
    Sonyman