中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 请教DOS批处理跳转问题 上一主题 | 下一主题
w909525
初级用户





积分 98
发帖 34
注册 2007-3-9
状态 离线
『楼 主』:  请教DOS批处理跳转问题

第一段 if errorlevel 0 goto a goto b 第二段 if errorlevel 0 goto a if errorlevel 1 goto b 请问上面两段代码有什么不一样的呢?当我执行第一段代码时总是跳转到a呢, 如果我想实现第二段代码的功能,只用一行代码要怎样写呢? 还有请问DOS的返回码是不是只有0 1不会有2呢 以上请指教谢谢


2007-4-12 01:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vk
中级用户




积分 218
发帖 86
注册 2006-8-10
状态 离线
『第 2 楼』:  

LZ第二段代码有错误 应该是 if errorlevel 1 goto a if errorlevel 0 goto b 还有就是建议LZ先看看IF命令的帮助文件 不懂再提问!




2007-4-12 05:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lp1129
初级用户





积分 186
发帖 92
注册 2007-3-27
状态 离线
『第 3 楼』:  

if errorlevel后面的错误码是要经过大量实验得来的, 主要看你在这句之前运行的什么命令,错误码不只是有0、1、2,有的命令甚至还有 100的错误码,还有的命令,会同时返回0和1的错误码 可见,楼主的第一代码就是因为上一条命令同时反回了0和1的错误码而始终跳转到a 比较长见的就是find命令,如下: @echo off find "3" 1.txt if errorlevel 0 echo a if errorlevel 1 echo b if errorlevel 2 echo c pause 如果没有找到会同时返回0和1的返回码,因此就会打印a和b 而找到了则只返回0返回码,只打印a 建议使用命令后不要急于跳转,而用ECHO打印测试准确后再执行跳转。 你的第一段代码,是如果返回码中有0就跳转到a,没有0就跳转到b 第二段代码,是发果返回码中有0就跳到a,有1就跳到b,如果返回码只有2就不能跳了 要记住,返回码不是唯一的! [ Last edited by lp1129 on 2007-4-11 at 05:55 PM ]


2007-4-12 06:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vk
中级用户




积分 218
发帖 86
注册 2006-8-10
状态 离线
『第 4 楼』:  

三楼的说法 我觉得有几个问题 1命令返回状态值排序应该是从大到小吧 2你举的例子
@echo off find "3" 1.txt if errorlevel 0 echo a if errorlevel 1 echo b if errorlevel 2 echo c pause
之所以会执行echo a和echo b 因为if errorlevel 0 echo a 这句语句按我的理解是这个意思 如果上个命令的返回值≥0就执行echo a命令 反之就执行下一条命令 那么find "3" 1.txt这条命令就算返回值为1也会执行echo a命令 后面为什么执行echo b就不用说了吧 大家都知道 而并非是三楼的朋友说的 如果没找到就会同时返回0和1 以上是个人看法 如果说的不对 还请楼上指点! [ Last edited by vk on 2007-4-12 at 08:26 AM ]




2007-4-12 08:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lp1129
初级用户





积分 186
发帖 92
注册 2007-3-27
状态 离线
『第 5 楼』:  

Originally posted by vk at 2007-4-11 07:22 PM: 三楼的说法 我觉得有几个问题 1命令返回状态值排序应该是从大到小吧 2你举的例子 之所以会执行echo a和echo b 因为if errorlevel 0 echo a 这句语句按我 ...
看来一知半解的不是我,是你了 返回值从大到小的顺序排列不是必须的, 而只是执行命令为 goto 时的习惯用法, 当使用 set 作为执行命令时, 通常会从小到大顺序排列, 比如需将返回码置入环境变量, 就需使用以下的顺序形式: if errorlevel 1 set el=1 if errorlevel 2 set el=2 if errorlevel 3 set el=3 ... 在IF的教程中是这样的 if errorlevel / if not errorlevel 数字 待执行的命令 如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。 绝对不是你说的返回值≥0就运行,这里返回码不是单纯的数字,而是代码 你可以改写我的代码为以下形式来测试,没有任何影响的。 @echo off find "3" 1.txt if errorlevel 2 echo a if errorlevel 1 echo b if errorlevel 0 echo c pause 活学活用吧,切不可成死套死用。


2007-4-12 14:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
htysm
高级用户




积分 866
发帖 415
注册 2005-12-4
状态 离线
『第 6 楼』:  

用“IF”去判断程序是否成功执行,往往会导致许多问题,而应该"&&“这个命令就不会存在了。 @echo off find "3" 1.txt && echo OK || echo NO pause>nul


2007-4-13 00:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vk
中级用户




积分 218
发帖 86
注册 2006-8-10
状态 离线
『第 7 楼』:  

原来有些命令会同时返回两个状态值 学习了! 感谢LS 但是有一点没想通 我举个例子 dir z: (电脑里没有Z盘 这是为了让命令返回值为1) if errorlevel 0 goto a goto b :b echo b pasue :a echo a pause 运行了这批处理后显示了a 按你的意思如果返回值等于指定的数字,则条件成立,运行命令,否则运行下一句。 dir z: 没找到指定路径 这句返回值为1并没有为0它为什么就执行了goto a [ Last edited by vk on 2007-4-13 at 05:41 AM ]




2007-4-13 05:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: