|
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你举的例子
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 ]
|
|
|
2007-4-12 08:22 |
|
|
lp1129
初级用户
积分 186
发帖 92
注册 2007-3-27
状态 离线
|
『第
5 楼』:
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
活学活用吧,切不可成死套死用。
|
|
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 |
|