|
peiliqin
初级用户
 
积分 34
发帖 16
注册 2008-7-24
状态 离线
|
『第
16 楼』:
我是这样测试的,读的文件是jieguo.txt
find /v "OK" A:\jieguo.txt
if errorlevel 1 goto end
echo 222
:end
echo 333
不管取值0或者是1,结果都是显示 222 333,取值2以上,都是显示333
|
|
2008-7-29 21:56 |
|
|
DOSforever
金牌会员
     
积分 4639
发帖 2239
注册 2005-1-30
状态 离线
|
|
2008-7-29 22:06 |
|
|
peiliqin
初级用户
 
积分 34
发帖 16
注册 2008-7-24
状态 离线
|
『第
18 楼』:
可是,find已经正常的完成了,结果是对的。怎么查看上一个命令的返回值?
|
|
2008-7-29 22:18 |
|
|
DOSforever
金牌会员
     
积分 4639
发帖 2239
注册 2005-1-30
状态 离线
|
|
2008-7-29 22:32 |
|
|
peiliqin
初级用户
 
积分 34
发帖 16
注册 2008-7-24
状态 离线
|
『第
20 楼』:
可是 只要有一个不同的地方,哪怕是在文件的最后一行,也可以在屏幕回显出来的。
论坛里帖出来的那个jieguo.txt只是其中一部分,其实这个文件有2000行左右,跟这个有关系吗?
|
|
2008-7-29 22:37 |
|
|
DOSforever
金牌会员
     
积分 4639
发帖 2239
注册 2005-1-30
状态 离线
|
|
2008-7-29 23:13 |
|
|
peiliqin
初级用户
 
积分 34
发帖 16
注册 2008-7-24
状态 离线
|
『第
22 楼』:
那我再试一下 看看是不是我这里出了什么问题
|
|
2008-7-29 23:38 |
|
|
qzwqzw
银牌会员
     天的白色影子
积分 2343
发帖 636
注册 2004-3-6
状态 离线
|
『第
23 楼』:
MS-DOS 7.1可以用command /z 查看 errorlevel
也可以自己写一个简单的批处理检测errorlevel
|
|
2008-7-30 00:03 |
|
|
DOSforever
金牌会员
     
积分 4639
发帖 2239
注册 2005-1-30
状态 离线
|
|
2008-7-30 02:07 |
|
|
peiliqin
初级用户
 
积分 34
发帖 16
注册 2008-7-24
状态 离线
|
『第
25 楼』:
等你们的消息了,我一直在等在好消息呢。
|
|
2008-7-30 06:12 |
|
|
lianjiang2004
金牌会员
     
积分 3946
发帖 1884
注册 2006-1-20
状态 离线
|
|
2008-7-30 08:24 |
|
|
DOSforever
金牌会员
     
积分 4639
发帖 2239
注册 2005-1-30
状态 离线
|
『第
27 楼』:
先说一下 FIND 的退出码说明
Quote: | FIND exit codes
The following list shows each exit code and a brief description of its meaning:
0
The search was completed successfully and at least one match was found.
1
The search was completed successfully, but no matches were found.
2
The search was not completed successfully. In this case, an error
occurred during the search, and FIND cannot report whether any matches
were found. |
|
建立一个只有一行 ok 内容的文件 txt ,用 FIND 不同的参数来执行查看结果和退出码:
D1.
Quote: | find "ok" txt
---------- TXT
ok
exitcode = 0 |
|
//找到了要找的字符,返回退出码0,正常
D2.
Quote: | find/v "ok" txt
---------- TXT
exitcode = 0 |
|
//按理,这里应该是没有找到要找的字符,为什么返回的退出码是0 ?难道一个不存在的行也算是找到?但是,同样也是“找到”,下面第四个例子返回的却是1
D3.
Quote: | find "w" txt
---------- TXT
exitcode = 1 |
|
//没有找到要找的字符,返回的退出码是1,正常
D4.
Quote: | find/v "w" txt
---------- TXT
ok
exitcode = 1 |
|
//找到了不包含 w 字符的行,也就是找到要找的字符,按理,这里的退出码应该是0,它为什么返回的是1?
现在,在把 txt 文件内容修改一下,增加一行 not 内容,再按照上述参数执行一下,看看结果:
D5.
Quote: | find "ok" txt
---------- TXT
ok
exitcode = 0 |
|
//
D6.
Quote: | find/v "ok" txt
---------- TXT
not
exitcode = 0 |
|
//
D7.
Quote: | find "w" txt
---------- TXT
exitcode = 1 |
|
//
D8.
Quote: | find/v "w" txt
---------- TXT
ok
not
exitcode = 1 |
|
//
具体我就不解释了,和前面一样,退出码的顺序同样也为 0 0 1 1 。我在 MS-DOS 6.22 和 MS-7.10 下的 FIND 得出相同的结果。
后来我又测试了下 WindowsXP 下的 FIND ,被测文件内容和参数顺序同上。
只有内容为 ok 的 txt 文件:
X1.
Quote: | find "ok" txt
---------- TXT
ok
exitcode = 0 |
|
//找到了要找的字符,退出码为0,正常
X2.
Quote: | find/v "ok" txt
---------- TXT
exitcode = 1 |
|
//没有找到要找的字符,退出码为1,正常
X3.
Quote: | find "w" txt
---------- TXT
exitcode = 1 |
|
//没有找到要找的字符,退出码为1,正常
X4.
Quote: | find/v "w" txt
---------- TXT
ok
exitcode = 0 |
|
//找到了不包含 w 的行,也就是查找到了要找的内容,退出码为0,正常
现在, txt 文件内容增加 not 一行:
X5.
Quote: | find "ok" txt
---------- TXT
ok
exitcode = 0 |
|
//找到了要找的字符,退出码为0,正常
X6.
Quote: | find/v "ok" txt
---------- TXT
not
exitcode = 0 |
|
//找到了不包含 ok 的行,也是找到了要查找的内容,退出码为0,正常
X7.
Quote: | find "w" txt
---------- TXT
exitcode = 1 |
|
//没有找到要找的字符,退出码为1,正常
X8.
Quote: | find/v "w" txt
---------- TXT
ok
not
exitcode = 0 |
|
//找到了不包含 w 的行,也是找到了要查找的内容,退出码为0,正常
由此看来 DOS 下,确切的说是 MS-DOS 下(其它的 DOS 我还没试)的 FIND 命令的退出码有缺陷,缺陷在于加了 /v 参数后的退出码没有按照本意来返回,也就是我前面 D2 和 D4 的例子,在 Windows XP 下(我的是SP2版的)的 FIND 修正了这个 bug 。其它版本的 Windows 未作测试。
最后注明:为了方便查看退出码和结果重定向到文件,我在 DOS 下的测试环境是 4DOS ,在 Windows 下的命令行环境是 4NT ,我想这应该不会影响什么测试结果。
|

DOS倒下了,但永远不死
DOS NEVER DIES !
投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187
本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747 |
|
2008-7-30 13:53 |
|
|
DOSforever
金牌会员
     
积分 4639
发帖 2239
注册 2005-1-30
状态 离线
|
|
2008-7-30 13:56 |
|
|
DOSforever
金牌会员
     
积分 4639
发帖 2239
注册 2005-1-30
状态 离线
|
|
2008-7-30 15:32 |
|
|
peiliqin
初级用户
 
积分 34
发帖 16
注册 2008-7-24
状态 离线
|
『第
30 楼』:
太谢谢你了,我得好好看看。谢谢你这么耐心的测试,真的感激得不知道说什么好了。
为了您的耐心,我也得好好看看,多试试才对。
|
|
2008-7-31 05:28 |
|