windows批处理中的errorlevel在IF逻辑中无效
比如if0==0(comand1echo%errorlevel%comand2echo%errorlevel%)上面无论comand1,comand2执行的返回值是怎样的...
比如
if 0 == 0 (
comand1
echo %errorlevel%
comand2
echo %errorlevel%
)
上面无论comand1,comand2执行的返回值是怎样的errorlevel的值都不会变,只有if逻辑结束之后才会改变。如何能在if逻辑中间取得comand执行的返回值,求高手解答,谢谢 展开
if 0 == 0 (
comand1
echo %errorlevel%
comand2
echo %errorlevel%
)
上面无论comand1,comand2执行的返回值是怎样的errorlevel的值都不会变,只有if逻辑结束之后才会改变。如何能在if逻辑中间取得comand执行的返回值,求高手解答,谢谢 展开
1个回答
展开全部
你问的问题涉及到批处理学习中一个比较基础性的问题--变量延迟,并不是errorlevel在if逻辑中无效,而是你对errorlevel变量的引用采用的是没开启变量延迟情况下的百分号%,根据常识,整个if语句在语法上仅仅是一条语句而已,语句执行过程中errorlevel变量的变化并不能通过%errorlevel%体现,而是应该在开启变量延迟的情况下用!errorlevel!体现,解决方法如下:
@echo off&setlocal enabledelayedexpansion
if 0 == 0 (
comand1
echo !errorlevel!
comand2
echo !errorlevel!
)
另一种解决方法是通过运用call语句的预处理两次原理来解决:
if 0 == 0 (
comand1
call,echo %%errorlevel%%
comand2
call,echo %%errorlevel%%
)
@echo off&setlocal enabledelayedexpansion
if 0 == 0 (
comand1
echo !errorlevel!
comand2
echo !errorlevel!
)
另一种解决方法是通过运用call语句的预处理两次原理来解决:
if 0 == 0 (
comand1
call,echo %%errorlevel%%
comand2
call,echo %%errorlevel%%
)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询