中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [讨论]关于FOR 语句错误退出码的问题
作者:
标题: [讨论]关于FOR 语句错误退出码的问题 上一主题 | 下一主题
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『楼 主』:  [讨论]关于FOR 语句错误退出码的问题

五星老土这几天心血来潮, 突然感到DOS的有趣。
老土本事不大,探索精神却不减当年。
这不,又发现一个有趣现象。

For 语句出错之后如何处理? 我尝试在FOR 语句之后设置退出码, 但无论FOR语句是否有错,退出码总是 1。

无奈之下,又一个怪念头,用CALL FOR 语句来获取退出码,居然收到奇效,不敢藏秘, 与大家共探讨。
@echo off
call:test error 1>nul 2>nul
IF %ERRORLEVEL%==0 (ECHO FOR语句运行无误) ELSE (ECHO FOR 语句出错)
pause&exit
:test
    for /f "usebackq delims==" %%i in (`%1`) do (echo %%i)
上述代码 “error” 换成"dir"" 之类则说明 FOR 语句运行成功。

另外, 请注意 IF ERRORLEVEL 0 语句再次无用, 大家不妨一试, 所以提醒大家尽量不要用该语句。 该语句的有关讨论见我另一贴 http://www.cn-dos.net/forum/viewthread.php?tid=40969&fpage=1



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-6-3 19:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 2 楼』:  

if errorlevel 0 不是没用,是因为errorlevel要从高值判断起:if errorlevel 2 goto ?
if errorlevel 1 goto ? if errorlevel 0 goto ?,而在一般的表达式中应该用下面的表达
方法:
if errrorlevel 1 (goto ?) else (goto ?)



批处理之家新域名:www.bathome.net
2008-6-3 21:21
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 3 楼』:  

楼上的, 经你这么一说,好像是这么一回事,可惜我年纪大了,记性每况愈下,这个if errorlevel 不用也罢。

FOR语句我掌握得不好,写得没错误那是我瞎猫碰死耗子,出错是常有的事,所以我在程序中要容错,错了大不了少了一段代码(只要基本功能没少),我就转到其他地方去执行, 所以才有了这么个判断FOR语句是否运行准确的问题。

我看你FOR语句用得挺溜的,我今后有些基本问题还望不吝赐教,这里先行谢过。



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-6-3 21:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: