Board logo

标题: 请教DOS批处理跳转问题 [打印本页]

作者: w909525     时间: 2007-4-12 01:57    标题: 请教DOS批处理跳转问题

第一段
if errorlevel 0 goto a
goto b
第二段
if errorlevel 0 goto a
if errorlevel 1 goto b
请问上面两段代码有什么不一样的呢?当我执行第一段代码时总是跳转到a呢,
如果我想实现第二段代码的功能,只用一行代码要怎样写呢?
还有请问DOS的返回码是不是只有0 1不会有2呢
以上请指教谢谢
作者: vk     时间: 2007-4-12 05:34
LZ第二段代码有错误
应该是
if errorlevel 1 goto a
if errorlevel 0 goto b
还有就是建议LZ先看看IF命令的帮助文件 不懂再提问!
作者: lp1129     时间: 2007-4-12 06:51
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 ]
作者: vk     时间: 2007-4-12 08:22
三楼的说法 我觉得有几个问题
1命令返回状态值排序应该是从大到小吧
2你举的例子

  Quote:
@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 ]
作者: lp1129     时间: 2007-4-12 14:20


  Quote:
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

活学活用吧,切不可成死套死用。
作者: htysm     时间: 2007-4-13 00:04
用“IF”去判断程序是否成功执行,往往会导致许多问题,而应该"&&“这个命令就不会存在了。

@echo off
find "3" 1.txt && echo OK || echo NO
pause>nul
作者: vk     时间: 2007-4-13 05:40
原来有些命令会同时返回两个状态值
学习了! 感谢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 ]