2010-06-10 75 views
0

我试图在变量中使用变量,但是仍然没有运气。批量变量和延迟变量变量

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

这是我的最后一次尝试。我想设置一个ERROR_COMMAND以在批处理文件中的某个步骤崩溃时被调用。该命令应该是:

IF ERRORLEVEL 1 !ERROR_COMMAND! 

IF ERRORLEVEL 1 %ERROR_COMMAND% 

的事情是,我不能找出来,如何正确设置ERROR_COMMAND变量,从而使错误级别不以评估分配的时间,但在评估的变量

当然的时候,我可以复制&代码粘贴遍及批处理文件,但使用的变量似乎只是有点漂亮......

有人吗?

感谢,米兰

+0

exit/B不符合您的想法它确实,foo.cmd && onlyDoThisOnSuccess.cmd不会工作 – Anders 2010-06-10 11:14:34

回答

1

我敢肯定有很多方法可以做到这一点,这里有两个:

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% 

还应该注意的是,如果有人设置ERRORLEVEL = foo(在您的脚本或“全局”中),%ERRORLEVEL%将无法正确解析(同样适用于%CD%,其他所有内置特殊变量)

+0

棘手的一个:) - 现在我用goto代替在另一个变量中指定ERRORLEVEL 明天测试你的代码并让你知道 – rezna 2010-06-10 17:30:32

+0

你能解释一下你的代码吗? – 2011-10-24 21:39:17

+0

@PiotrDobrogost:有什么解释?它会打印“errlvl = 1”,因为verify命令失败(故意显示> 0的错误级别),并且%%将阻止它在set命令中扩展%ERRORLEVEL%... – Anders 2011-10-25 13:34:58