简体   繁体   中英

variable in variable in batch and delayed expansion

I'm trying to use variable in variable in conjunction with delayed expansion but still no luck.

SETLOCAL EnableDelayedExpansion
SET ERROR_COMMAND=exit /B ^!ERRORLEVEL^!

This is my last try. I want to setup an ERROR_COMMAND to be called when one of the steps in batch file crashes. The command is supposed to be:

IF ERRORLEVEL 1 !ERROR_COMMAND!

or

IF ERRORLEVEL 1 %ERROR_COMMAND%

The thing is, I'm not able to find out, how to SET properly the ERROR_COMMAND variable, so that ERRORLEVEL is not evaluated at the time of assignment, but at the time of evaluating the variable

Of course I can copy&paste the code all over the batch file, but using the variable just seems a bit prettier...

Anyone?

Thanks, Milan

I'm sure there are many ways to do this, here are two:

A)

SET ERROR_COMMAND=call echo.errlvl=%%ERRORLEVEL%%

verify failthis 2>nul
%ERROR_COMMAND%

B)

setlocal DISABLEDELAYEDEXPANSION&set "X=!"
call (endlocal&set "ERROR_COMMAND=echo.errlvl=%X%ERRORLEVEL%X%")&setlocal ENABLEDELAYEDEXPANSION

verify failthis 2>nul
%ERROR_COMMAND%

It should also be noted that if someone does set ERRORLEVEL=foo (In your script or "globally"), %ERRORLEVEL% will not resolve correctly (Same goes for %CD% and all the other built in special variables)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM