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-Key: 385796

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

Printed on: April 26, 2024 at 03:04 o'clock

Mitglied: 137084
Solution 137084 Sep 07, 2018 updated at 17:31:52 (UTC)
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.
Member: ThomasH2
ThomasH2 Sep 07, 2018 updated at 18:35:47 (UTC)
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.