Great tip!
One change is needed in my opinion though:
SET /A ERRLEV = "(%ERRLEV1% & %ERRLEV2%) & 24"
Should be "(%ERRLEV1% | %ERRLEV2%) & 24"
(untested)
Otherwise you'll miss error code(s) in cases when e.g.
ERRLEV1=8 and ERRLEV2=16
or
ERRLEV1=24 and ERRLEV2=0
Edit:
Hope this example illustrates my point:
select (8 & 16) & 24 as errorcode_lost
select (8 | 16) & 24 as errorcode_active
select (0 | 16) & 24 as errorcode_active
select (8 | 8) & 24 as errorcode_active
select (5 | 6) & 24 as no_errorcode
select (0 | 0) & 24 as no_errorcode