中易网

批处理errorlevel用在if语句中无效

答案:3  悬赏:50  
解决时间 2021-02-02 13:44
我用以下语句做例子
===================分割线=================
@ECHO off
DEL /F /A /Q /S %1
IF errorlevel 0 GOTO 13
IF errorlevel 1 GOTO 14
:13
cls
ECHO 删除 %1 成功
pause
goto end
:14
cls
ECHO 删除 %1 失败
pause
:end
exit

=====================分割线=================
无论有没有 %1 这个路径(也就是有没有出错) , 显示的都是"删除 %1 成功"
(%1在这里是指拖动到该批处理图标上的文件)
可是
如果写入txt
就没错
还是拿上面的来做例子
例如

===================分割线================
@ECHO off
DEL /F /A /Q /S %1
:13
cls
ECHO 返回值: %errorlevel% >>c:\a.log
start " " "C:\a.log"
pause
goto end
:end
exit
==================分割线===============
如果双击
在①例中会显示删除 成功
在②例中会写入文本的是"1"(失败)

到底咋回事?????
求高手指教!!!!!

第②种要先在c盘里新建a.log
懒得新建的
复制代码
保存为1.bat
运行
代码如下
==================分割线=============
echo.>c:\a.log



最佳答案
使用 if errorlevel 的时候,应该把数字高的放在前面,因为此处的 if errorlevel 0 是在命令返回值大于 0 的时候成立的,相当于 if %errorlevel% geq 0,而当删除失败时 errorlevel 等于 1,当然符合大于 0 的条件了。
三个解决办法:
1、调转顺序,先执行 errorlevel 值高的 if 命令
2、使用 if %errorlevel%==0 这里的 %errorlevel% 将被预处理成固定值,与数字 0 进行数值比较,也就不存在返回值大于 0 时产生的问题了
3、使用逻辑连接符代替 if errorlevel,改成:
DEL /F /A /Q /S %1 && echo 删除成功&&goto 13 || echo 删除失败&&goto 14
全部回答
把那俩个 IF 条件语句换个次序看看,也就是改成下面的! IF errorlevel 1 GOTO 14 IF errorlevel 0 GOTO 13 究竟是为什么,我好想以前看过在VERYBAT 这个论坛里面看过一个ID:"英雄" 的 人写过一个教程,里面详细解释了这个原因!
你问的问题涉及到批处理学习中一个比较基础性的问题--变量延迟,并不是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%% )
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
iphone 微信怎么设置为来信息在主页显示不出
怎么测试一个女孩是不是喜欢你?
桐子岗街地址在哪,我要去那里办事
ipad后壳可以换吗
网上买的很火的随便果真的可以减肥吗
歌瑞诗美妆馆在什么地方啊,我要过去处理事情
红帽redhat linux有哪些版本?最新版本是多少
一岁半她就下午呕吐早上4点多5点就会哭精神也
富东粮油批发地址有知道的么?有点事想过去
久象地板怎么去啊,有知道地址的么
如果你拾到了美丽的落叶,你会做些什么?续写
鲜蘑菇炖鸡汤怎么做好吃,鲜蘑菇炖鸡汤的家常
连平县公安局交警大队忠信中队在哪里啊,我有
家用无线路由哪种信号强??
旭日光电我想知道这个在什么地方
推荐资讯
我在浙江海宁,想报考浙江招自考生的大学。请
发送的QQ离线文件对方没接受,自己电脑有保存
我想骑自行过川藏线,需要注意什么?
广州东站地铁站在哪个出口是天寿路152号
想买房,父母付首付和贷款,我可不可以用自己
天津好一点的房屋中介
EXCEl表格怎样把一列中的 文本 复制到 两格合
请教各位一个事情: 为什么离心泵型号上标出
今生缘婚庆怎么去啊,有知道地址的么
He was late for school yesterday.(同义句
在一个有余数的除法算式里,除数和商都是9被
第五人格新手要怎么跑
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?