Exitvalue für Subroutine
Hallo,
gibt es eine Möglichkeit, den Aufruf eine Subroutine mittels Exitvalue zu überprüfen?
Das funktioniert nicht, da er mir die ganze Shell beendet. Gibt es dafür eine Möglichkeit?
Ich möchte eine Subroutine aufrufen und hinterher die Möglichkeit haben, auf mehrere Varianten zu überprüfen.
Gruß,
Steffen
gibt es eine Möglichkeit, den Aufruf eine Subroutine mittels Exitvalue zu überprüfen?
@echo off
echo Mache was
call :subroutine
if %errorlevel%==20 echo HALLO
goto :eof
:subroutine
echo Mache nix
exit /b 20
Das funktioniert nicht, da er mir die ganze Shell beendet. Gibt es dafür eine Möglichkeit?
Ich möchte eine Subroutine aufrufen und hinterher die Möglichkeit haben, auf mehrere Varianten zu überprüfen.
Gruß,
Steffen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 115907
Url: https://administrator.de/contentid/115907
Ausgedruckt am: 26.11.2024 um 05:11 Uhr
6 Kommentare
Neuester Kommentar
Servus,
das exit am ende der Sub ist das ende des scriptes.
Von daher
(edit)
vielleicht wird es "so" deutlicher...
(/edit)
Gruß
das exit am ende der Sub ist das ende des scriptes.
Von daher
@echo off
echo Mache was
call :subroutine
echo HALLO
if %errorlevel%==20 echo HALLO Fehler20
call :subroutine
echo HALLO2
if %errorlevel%==20 echo HALLO2 Fehler20
goto :eof
:subroutine
echo Mache nix
:eof
(edit)
vielleicht wird es "so" deutlicher...
@echo off
echo Mache was
call :subroutine Hallo
call :subroutine Moin
call :subroutine Abend
goto :eof
:subroutine
echo %1
:eof
Gruß
Zitat von @60730:
Servus,
das exit am ende der Sub ist das ende des scriptes.
Servus,
das exit am ende der Sub ist das ende des scriptes.
Hallo Timo,
da liegst du falsch. Problem ist das er den Batch nicht aus einer Shell heraus startet und
ein goto :eof ohne eine vorherige Pause macht.
Er hat also gar keine Gelegenheit das richtige Ergebnis zu sehen weil das Fenster sofort weg ist.
Dies funktioniert sehr wohl und es gibt auch eine Variante mit bedingter Ausführung:
@echo off
echo Main Mache was
call :subroutine
if %errorlevel%==20 echo HALLO
call :subroutine || echo Return mit ERR:%ErrorLevel%
Pause
goto :eof
:subroutine
echo subroutine Mache nix
exit /b 20
Gruß
LotPings
Moin Knumskull,
ich hab keine Ahnung, wofür das gut sein soll....
Geht es um eine Wette - dann hätte ich gern anteilig 1/24 davon, falls es um eine Kiste Becks gehen sollte.
Demo:
Grüße
Biber
ich hab keine Ahnung, wofür das gut sein soll....
Geht es um eine Wette - dann hätte ich gern anteilig 1/24 davon, falls es um eine Kiste Becks gehen sollte.
@echo off
echo Mache was
call :subroutine
@echo Errorlevel [%errorlevel%]
if %errorlevel%==20 echo HALLO
goto :eof
:subroutine
echo Mache nix
Cmd /c exit /b 20
goto :eof
>e:\schnipsel\errorlevel20test.cmd
Mache was
Mache nix
Errorlevel [20]
HALLO
Grüße
Biber
Moin Knumskull,
dann nochmal etwas ernsthafter.
Wenn Du tatsächlich
--> dann mach das mit einer selbst angelegten "Private"-Variablen "Fehlercode" oder "myErrorLevel".
Die "Umgebungsvariable" %Errorlevel% wird sowohl von internen wie von externen Befehlen gesetzt, d.h Du kannst ja nicht mal sicher sein, wie lange dieser per EXIT /B gesetzte Wert so bleibt.
Oder hast Du schon mal probiert, ob z.B. eine dazwischengeschobene Kommentarzeile mit REM nicht vielleicht wieder das %ErrorLevel% auf 0 zurücksetzt?
Grüße
Biber
dann nochmal etwas ernsthafter.
Wenn Du tatsächlich
- eine Unterroutine aufrufst, die verschiedene Fehlercodes oder Errorlevel setzt,
- die Du dann im Haupt-Teil meinetwegen nach "wenn Fehlercode größer 10, dann brich ab" auswertest
--> dann mach das mit einer selbst angelegten "Private"-Variablen "Fehlercode" oder "myErrorLevel".
Die "Umgebungsvariable" %Errorlevel% wird sowohl von internen wie von externen Befehlen gesetzt, d.h Du kannst ja nicht mal sicher sein, wie lange dieser per EXIT /B gesetzte Wert so bleibt.
Oder hast Du schon mal probiert, ob z.B. eine dazwischengeschobene Kommentarzeile mit REM nicht vielleicht wieder das %ErrorLevel% auf 0 zurücksetzt?
Grüße
Biber