Rückgabewerte abfangen
Hallo,
ich habe einen batch, der in einer zeile einen Rückgabe wert zurückliefert:
1.bat
@ExIT /b 10
hintergrund: ich möchte an eine externe anwendung, welche 1.bat aufruft einen code zurückgeben. habe gerade bemerkt, dass ich diesen mit echo %errorlevel% abfragen kann.
angeblich bekommt die aufrufende prozedur aber immer den code "0" zurück.
gibt es keine möglichkeit den richtigen return code an eine aufrufende anwendung zurückzugeben?
Gruß
ich habe einen batch, der in einer zeile einen Rückgabe wert zurückliefert:
1.bat
@ExIT /b 10
hintergrund: ich möchte an eine externe anwendung, welche 1.bat aufruft einen code zurückgeben. habe gerade bemerkt, dass ich diesen mit echo %errorlevel% abfragen kann.
angeblich bekommt die aufrufende prozedur aber immer den code "0" zurück.
gibt es keine möglichkeit den richtigen return code an eine aufrufende anwendung zurückzugeben?
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 111266
Url: https://administrator.de/contentid/111266
Ausgedruckt am: 16.11.2024 um 07:11 Uhr
3 Kommentare
Neuester Kommentar
Moin webbudda,
Wenn ich eine Batchdatei nach Deinem Muster oben erzeuge, dann liefert die erstmal beim test am CMD-Prompt das erwartete Ergebnis.
Okay, aber...
Wenn die aufrufende Applikation einen Batch (oder ein .pdf oder ein .doc, also eine nicht "allein" ausführbare "Datendatei" ) aufruft
--> dann ist ja der tatsächliche Aufruf "starte das .PDF" zu übersetzen mit
---> ist ja der tatsächliche Aufruf "starte die .Bat" zu übersetzen mit
Meist ist dieser Aufruf dann so einer.
---> Du bekommst NICHT das liebevoll gesetzte ErrorLevel 10 der Batch zurück, sondern...
---> Hoch erhobenen hauptes das stolze "Errorlevel 0" = Ich habe ohne Fehler fertig" der CMD.exe
Wenn Du das Batch-gesetzte Errorlevel transportieren willst, dann
Aber - auch wenn es so funktioniert.... das kannst Du so niemandem erklären.
Grüße
Biber
[Edit] Sinn entstellenden Tippfehler korrigiert -s.u. [/Edit]
angeblich bekommt die aufrufende prozedur aber immer den code "0" zurück.
Kann schon sein.Wenn ich eine Batchdatei nach Deinem Muster oben erzeuge, dann liefert die erstmal beim test am CMD-Prompt das erwartete Ergebnis.
echo @EXIT /B 10 >ErrLev10.cmd
-- Batchdatei ist erzeugt... jetzt aufrufen und Errorlevel prüfen:
Errlev10
@echo %errorlevel%
10 <-------------Rückgabe bzw. %Errorlevel%-Wert
Okay, aber...
Wenn die aufrufende Applikation einen Batch (oder ein .pdf oder ein .doc, also eine nicht "allein" ausführbare "Datendatei" ) aufruft
--> dann ist ja der tatsächliche Aufruf "starte das .PDF" zu übersetzen mit
"Starte den Adobe Reader, damit der das PDF starten kann"
- oder in Deinem Fall---> ist ja der tatsächliche Aufruf "starte die .Bat" zu übersetzen mit
"Starte die CMD.exe, damit die die .Bat starten kann"
Meist ist dieser Aufruf dann so einer.
%comspec% /c xy.bat
- bzw übersetzt dannC:\WINDOWS\system32\cmd.exe /c xy.bat
... in unserem Fall simulierbar am Prompt mitcmd /c errlev10
... und rate mal, was passiert.echo %errorlevel%
---> Du bekommst NICHT das liebevoll gesetzte ErrorLevel 10 der Batch zurück, sondern...
---> Hoch erhobenen hauptes das stolze "Errorlevel 0" = Ich habe ohne Fehler fertig" der CMD.exe
Wenn Du das Batch-gesetzte Errorlevel transportieren willst, dann
- entweder sicherstellen, dass Dein Batch NICHT in einer neuen Shell gestartet wird mit "CMD /C"
- oder mit den Wölfen heulen, nur lauter:
[---hier ist Errorlevel gleich 0 --]
cmd /c call errlev10
echo %errorlevel%
10 <----hier ist trotz eines in einer neu gestarteten CMD-Instanz
<--- und dort gesetzten Errorlevels ebenfalls ->Errorlevel = 10
Aber - auch wenn es so funktioniert.... das kannst Du so niemandem erklären.
Grüße
Biber
[Edit] Sinn entstellenden Tippfehler korrigiert -s.u. [/Edit]
Moin webbudda,
Du hast natürlich Recht...
--->Hier fehlt(e) natürlich das wichtigste Wort "NICHT".
Gemeint war und ist natürlich
... sicherstellen, dass Dein Batch NICHT in einer neuen Shell gestartet wird mit "CMD /C"
Danke für den Hinweis
Biber
Du hast natürlich Recht...
entweder sicherstellen, dass Dein Batch in einer neuen Shell gestartet wird mit "CMD /C"
aber damit gehts ja gerade eben nicht. Tippfehler deinerseits?--->Hier fehlt(e) natürlich das wichtigste Wort "NICHT".
Gemeint war und ist natürlich
... sicherstellen, dass Dein Batch NICHT in einer neuen Shell gestartet wird mit "CMD /C"
Danke für den Hinweis
Biber