中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » [求助][讨论]有没有高手可以在纯dos下做到这个功能?
« [1] [2] [3] »
作者:
标题: [求助][讨论]有没有高手可以在纯dos下做到这个功能? 上一主题 | 下一主题
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
状态 离线
『第 17 楼』:  

如果是这样的话,说明退出码>=2,find 没能完成搜索,在搜索时发生了错误。你的 A:\jieguo.txt 有什么问题?不一定要用 A: 来测试。



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-29 22:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
peiliqin
初级用户





积分 34
发帖 16
注册 2008-7-24
状态 离线
『第 18 楼』:  

可是,find已经正常的完成了,结果是对的。怎么查看上一个命令的返回值?

2008-7-29 22:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 19 楼』:  

command 下没办法直接看退出码,只能根据 errorlever 来判断,除非用 4DOS 。
结果是对的?对什么对,根据你的语句和结果就是不对的。“不管取值0或者是1,结果都是显示 222 333,取值2以上,都是显示333”,这就说明了说明退出码>=2 。find 结束了搜索不一定说明是正常完成了。其实你不一定要用原文件来测试,就在硬盘上建一个文件,内容只有一个 OK ,然后删除这个 OK 或者改成其它内容不就得了?



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-29 22:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
peiliqin
初级用户





积分 34
发帖 16
注册 2008-7-24
状态 离线
『第 20 楼』:  

可是 只要有一个不同的地方,哪怕是在文件的最后一行,也可以在屏幕回显出来的。
论坛里帖出来的那个jieguo.txt只是其中一部分,其实这个文件有2000行左右,跟这个有关系吗?

2008-7-29 22:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 21 楼』:  

我不知道 find 搜索文件的大小和行数的上限,我想上千行应该不是什么问题吧,写一个程序几万行都不稀奇。我特地建了个有2048行,每行内容都是ok的文件,第2049行不是ok,试下来没什么问题,返回的结果和退出码完全在意料之中。

你为什么不在硬盘上试一下



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-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
状态 离线
『第 24 楼』:  

我后来又试验了下,看来 find  的退出码不是我们想像的那样,具体分析等会儿在说。



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 02:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
peiliqin
初级用户





积分 34
发帖 16
注册 2008-7-24
状态 离线
『第 25 楼』:  

等你们的消息了,我一直在等在好消息呢。

2008-7-30 06:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lianjiang2004
金牌会员





积分 3946
发帖 1884
注册 2006-1-20
状态 离线
『第 26 楼』:  

STRINGS [目标变量=]LEFT 源字符串 要取的字符数量  〈从左边取源字符串的指定字符数量〉



Windows 一键还原
http://www.yjhy.com
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
状态 离线
『第 28 楼』:  

但是,从你的测试结果来看,这个缺陷应该和你的返回退出码是>=2无关。
结合你的具体应用,假如你的校验结果文件全是OK,和有一个不OK的,用 find /v "OK" 命令,返回的退出码都是0,无法判断。就像我前面的 D2 和 D6 的例子。

我不知道你用的是哪个 MD5 ,从你的参数格式来看,使用这样格式的应该是 md5sum.exe ,和 md5.exe 是两个不同的程序,这两个程序也提供了退出码,一般,生成过程和校验结果无误的话,返回的都是0,有错误总是>=1。



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:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 29 楼』:  

再补充说明一下 D6 这个例子,看上去好像是对的,find 确实找到了不包含 ok 字符的行 not ,返回的是 0,但我认为其实这个和 D1 和 D5 返回的是 0 的原因一样,find 认为它找到了 ok ,而不是因为找到了不包含 ok 的行。



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 15:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
peiliqin
初级用户





积分 34
发帖 16
注册 2008-7-24
状态 离线
『第 30 楼』:  

太谢谢你了,我得好好看看。谢谢你这么耐心的测试,真的感激得不知道说什么好了。
为了您的耐心,我也得好好看看,多试试才对。

2008-7-31 05:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: