thomash2
Goto Top

Rückgabewerte einer Batch an die aufrufende Batch

Hallo,

ich würde gerne eine elegante Möglichkeit erfahren, wie von einer Batch ein Wert an die aufrufende Batch übergeben werden kann:

Bekannt sind mir nur folgende Verfahren:
-"Rückgabe" via globaler Variable etwas unschön
-"Rückgabe" via Textfile
noch schlechter

Beispiel:

BatchMain:

:: Batchsub macht beliebige Berechnungen, Datenbankabfragen, Benutzereingaben etc und gibt 0 oder 1 zurück
CALL BatchSub

::hier soll der Returncode abgefragt werden
::Wenn man es in %ERRORLEVEL% bekäme, wäre am besten


Das muss ab WinServer 2008R2 laufen. Powershell und wscript ist nicht erlaubt.

Content-ID: 385796

Url: https://administrator.de/contentid/385796

Ausgedruckt am: 25.11.2024 um 04:11 Uhr

137084
Lösung 137084 07.09.2018 aktualisiert um 19:31:52 Uhr
Goto Top
Im zweiten Skript einfach deinen ReturnCode zurückgeben mit
exit /b 255
Im ersten Skript kannst du dann nach der CALL Zeile den Errorlevel wie gehabt abfragen.

Beispiel

batch1.cmd
@echo off
call batch2.cmd
echo ResultCode: %ERRORLEVEL%
batch2.cmd
@echo off
exit /b 255

Bitte mal auf der Konsole exit /? eingeben und du bist schlauer face-smile.
ThomasH2
ThomasH2 07.09.2018 aktualisiert um 20:35:47 Uhr
Goto Top
Vielen Dank,
das hatte ich schon probiert und das funktioniert auch, aber ich brauche es in dieser Konstellation:

batch1.cmd

@echo off
dir DieseDateiGibtEsNicht > nul
echo ResultCodeDIR: %ERRORLEVEL%

if "%errorlevel%"=="0" (  
	echo OK 1
	call batch2.cmd
	echo ResultCodeB2a: %ERRORLEVEL%
) else (
	echo Fehler 1	
	call batch2.cmd
	echo ResultCodeB2b: %ERRORLEVEL%
)

und da liefert es:

Datei nicht gefunden //nur zur Demo
ResultCodeDIR: 1
Fehler 1
ResultCodeB2b: 1

D.h., ich bekomme dann statt 255 die 1 welches dem Errorlevel von Dir (Datei nicht gefunden) entspricht.

batch2.cmd habe ich von Dir übernommen.

Ich hatte auch schon mit SETLOCAL EnableDelayedExpansion
gearbeitet, sehe aber scheinbar den Wald vor lauter Bäumen nicht.


danke so läufts

@echo off

SETLOCAL EnableDelayedExpansion

dir DieseDateiGibtEsNicht > nul
echo ResultCodeDIR: %ERRORLEVEL%

if "%errorlevel%"=="0" (  
	echo OK 1
	call batch2.cmd
	echo ResultCodeB2a: %ERRORLEVEL%
	echo ResultCodeB2b: !ERRORLEVEL!

	if "!ERRORLEVEL!"=="255" Echo OK Treffer!!!!  

) else (
	echo Fehler 1	
	call batch2.cmd
	echo ResultCodeB2b: %ERRORLEVEL%
	echo ResultCodeB2b: !ERRORLEVEL!

	if "!ERRORLEVEL!"=="255" Echo Fehler Treffer!!!!  
)


Mein Problem lag darin, dass ich im Produktionscode
SETLOCAL EnableDelayedExpansion
einige Zeilen zu spät gesetzt habe.

Vielen Dank.