![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-19 11:36 |
共 47,814 主题排行 / 349,908 发帖 / 今日 0 篇 / 48,259 会员排行 |
| DOS疑难解答 & 问题讨论 (解答室) » [求助][讨论]有没有高手可以在纯dos下做到这个功能? |
| 可打印版本 3,355 / 33 |
| 第16楼 peiliqin | 发表于 2008-07-29 21:56 |
| 初级用户 发帖 16 积分 34 | |
|
我是这样测试的,读的文件是jieguo.txt
find /v "OK" A:\jieguo.txt if errorlevel 1 goto end echo 222 :end echo 333 不管取值0或者是1,结果都是显示 222 333,取值2以上,都是显示333 |
|
| 第17楼 DOSforever | 发表于 2008-07-29 22:06 |
| 金牌会员 发帖 2,239 积分 4,639 | |
|
如果是这样的话,说明退出码>=2,find 没能完成搜索,在搜索时发生了错误。你的 A:\jieguo.txt 有什么问题?不一定要用 A: 来测试。
|
|
| 第18楼 peiliqin | 发表于 2008-07-29 22:18 |
| 初级用户 发帖 16 积分 34 | |
|
可是,find已经正常的完成了,结果是对的。怎么查看上一个命令的返回值?
|
|
| 第19楼 DOSforever | 发表于 2008-07-29 22:32 |
| 金牌会员 发帖 2,239 积分 4,639 | |
|
command 下没办法直接看退出码,只能根据 errorlever 来判断,除非用 4DOS 。
结果是对的?对什么对,根据你的语句和结果就是不对的。“不管取值0或者是1,结果都是显示 222 333,取值2以上,都是显示333”,这就说明了说明退出码>=2 。find 结束了搜索不一定说明是正常完成了。其实你不一定要用原文件来测试,就在硬盘上建一个文件,内容只有一个 OK ,然后删除这个 OK 或者改成其它内容不就得了? |
|
| 第20楼 peiliqin | 发表于 2008-07-29 22:37 |
| 初级用户 发帖 16 积分 34 | |
|
可是 只要有一个不同的地方,哪怕是在文件的最后一行,也可以在屏幕回显出来的。
论坛里帖出来的那个jieguo.txt只是其中一部分,其实这个文件有2000行左右,跟这个有关系吗? |
|
| 第21楼 DOSforever | 发表于 2008-07-29 23:13 |
| 金牌会员 发帖 2,239 积分 4,639 | |
|
我不知道 find 搜索文件的大小和行数的上限,我想上千行应该不是什么问题吧,写一个程序几万行都不稀奇。我特地建了个有2048行,每行内容都是ok的文件,第2049行不是ok,试下来没什么问题,返回的结果和退出码完全在意料之中。
你为什么不在硬盘上试一下 |
|
| 第22楼 peiliqin | 发表于 2008-07-29 23:38 |
| 初级用户 发帖 16 积分 34 | |
|
那我再试一下 看看是不是我这里出了什么问题
|
|
| 第23楼 qzwqzw | 发表于 2008-07-30 00:03 |
| 银牌会员 发帖 636 积分 2,343 | |
|
MS-DOS 7.1可以用command /z 查看 errorlevel
也可以自己写一个简单的批处理检测errorlevel |
|
| 第24楼 DOSforever | 发表于 2008-07-30 02:07 |
| 金牌会员 发帖 2,239 积分 4,639 | |
|
我后来又试验了下,看来 find 的退出码不是我们想像的那样,具体分析等会儿在说。
|
|
| 第25楼 peiliqin | 发表于 2008-07-30 06:12 |
| 初级用户 发帖 16 积分 34 | |
|
等你们的消息了,我一直在等在好消息呢。
|
|
| 第26楼 lianjiang2004 | 发表于 2008-07-30 08:24 |
| 金牌会员 发帖 1,884 积分 3,946 | |
|
STRINGS [目标变量=]LEFT 源字符串 要取的字符数量 〈从左边取源字符串的指定字符数量〉
|
|
| 第27楼 DOSforever | 发表于 2008-07-30 13:53 |
| 金牌会员 发帖 2,239 积分 4,639 | |
|
先说一下 FIND 的退出码说明
建立一个只有一行 ok 内容的文件 txt ,用 FIND 不同的参数来执行查看结果和退出码: D1.
//找到了要找的字符,返回退出码0,正常 D2.
//按理,这里应该是没有找到要找的字符,为什么返回的退出码是0 ?难道一个不存在的行也算是找到?但是,同样也是“找到”,下面第四个例子返回的却是1 D3.
//没有找到要找的字符,返回的退出码是1,正常 D4.
//找到了不包含 w 字符的行,也就是找到要找的字符,按理,这里的退出码应该是0,它为什么返回的是1? 现在,在把 txt 文件内容修改一下,增加一行 not 内容,再按照上述参数执行一下,看看结果: D5.
// D6.
// D7.
// D8.
// 具体我就不解释了,和前面一样,退出码的顺序同样也为 0 0 1 1 。我在 MS-DOS 6.22 和 MS-7.10 下的 FIND 得出相同的结果。 后来我又测试了下 WindowsXP 下的 FIND ,被测文件内容和参数顺序同上。 只有内容为 ok 的 txt 文件: X1.
//找到了要找的字符,退出码为0,正常 X2.
//没有找到要找的字符,退出码为1,正常 X3.
//没有找到要找的字符,退出码为1,正常 X4.
//找到了不包含 w 的行,也就是查找到了要找的内容,退出码为0,正常 现在, txt 文件内容增加 not 一行: X5.
//找到了要找的字符,退出码为0,正常 X6.
//找到了不包含 ok 的行,也是找到了要查找的内容,退出码为0,正常 X7.
//没有找到要找的字符,退出码为1,正常 X8.
//找到了不包含 w 的行,也是找到了要查找的内容,退出码为0,正常 由此看来 DOS 下,确切的说是 MS-DOS 下(其它的 DOS 我还没试)的 FIND 命令的退出码有缺陷,缺陷在于加了 /v 参数后的退出码没有按照本意来返回,也就是我前面 D2 和 D4 的例子,在 Windows XP 下(我的是SP2版的)的 FIND 修正了这个 bug 。其它版本的 Windows 未作测试。 最后注明:为了方便查看退出码和结果重定向到文件,我在 DOS 下的测试环境是 4DOS ,在 Windows 下的命令行环境是 4NT ,我想这应该不会影响什么测试结果。 |
|
| 第28楼 DOSforever | 发表于 2008-07-30 13:56 |
| 金牌会员 发帖 2,239 积分 4,639 | |
|
但是,从你的测试结果来看,这个缺陷应该和你的返回退出码是>=2无关。
结合你的具体应用,假如你的校验结果文件全是OK,和有一个不OK的,用 find /v "OK" 命令,返回的退出码都是0,无法判断。就像我前面的 D2 和 D6 的例子。 我不知道你用的是哪个 MD5 ,从你的参数格式来看,使用这样格式的应该是 md5sum.exe ,和 md5.exe 是两个不同的程序,这两个程序也提供了退出码,一般,生成过程和校验结果无误的话,返回的都是0,有错误总是>=1。 |
|
| 第29楼 DOSforever | 发表于 2008-07-30 15:32 |
| 金牌会员 发帖 2,239 积分 4,639 | |
|
再补充说明一下 D6 这个例子,看上去好像是对的,find 确实找到了不包含 ok 字符的行 not ,返回的是 0,但我认为其实这个和 D1 和 D5 返回的是 0 的原因一样,find 认为它找到了 ok ,而不是因为找到了不包含 ok 的行。
|
|
| 第30楼 peiliqin | 发表于 2008-07-31 05:28 |
| 初级用户 发帖 16 积分 34 | |
|
太谢谢你了,我得好好看看。谢谢你这么耐心的测试,真的感激得不知道说什么好了。
为了您的耐心,我也得好好看看,多试试才对。 |
|
| 上一页 1 2 3 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |