バッチ「関数」の戻り値を格納するためにグローバル変数を使用しています。そして、それは奇妙な方法で変化します:
result local = 1
result global = 1
result = 4
そのため、関数呼び出し後に何らかの結果が 4 に戻っています。ここで何が問題なのですか?
set result=4
if %build%==1 (
call :build_1
echo "result=%result%"
if %result%==4 (
exit /b 4
goto error
)
call :build_2
if %result%==4 (
exit /b 4
goto error
)
call :build_3
if %result%==4 (
exit /b 4
goto error
)
call :build_4
if %result%==4 (
exit /b 4
goto error
)
goto success
)
rem return error/success code in result variable
:build_1
setlocal
rem Stage 1
call :build_one_unit
if %errorlevel%==4 (
echo FAILED!
set result=4
exit /b
)
rem Stage 2
call :build_one_unit
if %errorlevel%==4 (
echo FAILED!
set result=4
exit /b
)
set result=1
echo "result local = %result%"
endlocal & set result=%result%
echo "result global = %result%"
goto:eof