batchdateien und return codes



  • Gibt es eine Möglichkeit aus Batchdateien oder cmd Dateien einen returncode an das aufrufende Programm zurück zu schicken.

    Ich will in Windows 2000 und höher aus einem C-Programm mit spawn eine Batchdatei starten, diese soll im Fehlerfall an das spawn analog zum Aufruf einer exe-Datei einen Wert zurückliefern. Ist diese möglich und falls ja wie

    Vielen Dank



  • Ja, das geht. Und zwar mit EXIT /B exitCode. Also z.B.

    EXIT /B -1
    


  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum Themen rund um den PC verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Über das verschieben bin ich ein bischen verwundert, da ich das eigentlich zum bereich Konsole / DOS zähle.

    Danke für die Information, es war leider ein Satz mit x
    Beendet den Befehlsinterpreter CMD.EXE oder die aktuelle Batchdatei.

    EXIT [/B] [exitCode]

    /B Beendet das aktuelle Batchprogramm anstatt CMD.EXE.
    Wenn diese Option außerhalb eines Batchprogramms aufgerufen
    wird, wird CMD.EXE beendet.

    ExitCode Gibt die Zahl an, die an ERRORLEVEL übergeben wird, wenn die
    Option /B angegeben wurde. Wenn CMD.EXE beendet wird, wird diese
    Zahl als "Process Exit Code" übergeben.

    Es stimmt zwar, das ich damit von einer UnterBatch an eine Batch einen Returncode über geben kann, leider ruft sowohl system() als auch spawn() über cmd.exe die Batch Datei auf und von der Batchdatei kann ich keinen returncode an cmd übergeben und cmd mit diesem returncode beenden.

    Vielleicht weis einer eine Hilfe.



  • Also so wie sich das liest würde ich sagen musst du einfach nur das /B beim letzten exit weglassen 😉
    Ist natürlich doof wenn man verschachtelte Batchfiles hat, aber in dem Fall kann man immernoch ein "execute_batch" Batchfile machen welches ein anderes Batchfile + Parametern ausführt und dann "exit %ERRORLEVEL%" macht... könnte gehen.



  • Prinzipiell eine mögliche Variante. Aber wie soll das gehen?
    Aufruf aus C heraus:

    char AppName[]="test.bat"
    char szCmdline[]="-test"
    PROCESS_INFORMATION pi;
    STARTUPINFO si={sizeof(si)};
    unsigned long int dwExitCode;
    BOOL fSucess;
    fSucess=CreateProcess(AppName,szCmdLine,NULL,NULL,FALSE,dwCreationFlags,NULL,NULL,&si ,&pi);
        if (fSucess)
        {
            CloseHandle(pi.hThread);
            WaitForSingleObject(pi.hProcess,INFINITE);
            GetExitCodeProcess(pi.hProcess,&dwExitCode);
            printf("spawn Exit=%x",dwExitCode);
            CloseHandle(pi.hProcess);
        }
        else
        {
        //errorhandling
        }
    

    Inhalt von test.bat

    echo %1
    exit /B 33
    

    dwExitCode=0 beim Aufruf der Batchtdatei, beim Aufruf von test1.exe ist der Fehlercode in dwExitCode enthalten. Schachteln von .bat/.cmd Dateien funktioniert.

    An welcher Stelle habe ich dann das exit /B vergessen?



  • Nicht vergessen, du sollst das "/B" beim letzten Aufruf WEGLASSEN.



  • Danke,

    funktioniert jetzt einwandfrei, der Fehler war wirklich, das im Batchfile das im spwan aufgerufen wurde, ein /B stand. Es funktioniert auf dieselbe Weise auch mit dem system() call. 🙂 🙂


Anmelden zum Antworten