![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-13 09:04 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS学习入门 & 精彩文章 (教学室) » 请教DOS批处理跳转问题 |
| 可打印版本 1,203 / 6 |
| 第1楼 w909525 | 发表于 2007-04-12 01:57 |
| 初级用户 发帖 34 积分 98 | |
|
请教DOS批处理跳转问题 第一段
if errorlevel 0 goto a goto b 第二段 if errorlevel 0 goto a if errorlevel 1 goto b 请问上面两段代码有什么不一样的呢?当我执行第一段代码时总是跳转到a呢, 如果我想实现第二段代码的功能,只用一行代码要怎样写呢? 还有请问DOS的返回码是不是只有0 1不会有2呢 以上请指教谢谢 |
|
| 第2楼 vk | 发表于 2007-04-12 05:34 |
| 中级用户 发帖 86 积分 218 | |
|
LZ第二段代码有错误
应该是 if errorlevel 1 goto a if errorlevel 0 goto b 还有就是建议LZ先看看IF命令的帮助文件 不懂再提问! |
|
| 第3楼 lp1129 | 发表于 2007-04-12 06:51 |
| 初级用户 发帖 92 积分 186 | |
|
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 ] |
|
| 第4楼 vk | 发表于 2007-04-12 08:22 |
| 中级用户 发帖 86 积分 218 | |
|
三楼的说法 我觉得有几个问题
1命令返回状态值排序应该是从大到小吧 2你举的例子
之所以会执行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 ] |
|
| 第5楼 lp1129 | 发表于 2007-04-12 14:20 |
| 初级用户 发帖 92 积分 186 | |
Originally posted by vk at 2007-4-11 07:22 PM: 看来一知半解的不是我,是你了 返回值从大到小的顺序排列不是必须的, 而只是执行命令为 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 活学活用吧,切不可成死套死用。 |
|
| 第6楼 htysm | 发表于 2007-04-13 00:04 |
| 高级用户 发帖 415 积分 866 | |
|
用“IF”去判断程序是否成功执行,往往会导致许多问题,而应该"&&“这个命令就不会存在了。
@echo off find "3" 1.txt && echo OK || echo NO pause>nul |
|
| 第7楼 vk | 发表于 2007-04-13 05:40 |
| 中级用户 发帖 86 积分 218 | |
|
原来有些命令会同时返回两个状态值
学习了! 感谢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 ] |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |