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

我用以下语句做例子===================分割线=================@ECHOoffDEL/F/A/Q/S%1IFerrorlevel0GOT... 我用以下语句做例子
===================分割线=================
@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
展开
 我来答
全天占线
2011-07-05
知道答主
回答量:16
采纳率:0%
帮助的人:18.2万
展开全部
使用 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
coolbi5
2011-07-05 · TA获得超过1万个赞
知道大有可为答主
回答量:1.1万
采纳率:35%
帮助的人:2451万
展开全部
把那俩个 IF 条件语句换个次序看看,也就是改成下面的!
IF errorlevel 1 GOTO 14
IF errorlevel 0 GOTO 13

究竟是为什么,我好想以前看过在VERYBAT 这个论坛里面看过一个ID:"英雄" 的
人写过一个教程,里面详细解释了这个原因!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Vigi123
2011-07-05 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:119
采纳率:0%
帮助的人:131万
展开全部
第一种:
IF errorlevel 0 GOTO 13
这种写法不对,改成:if %errorlevel%==0 goto 13
第二种没问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式