中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-27 04:31
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 两种方法比较不同的文本,输出结果时都出错!! 查看 802 回复 5
楼 主 两种方法比较不同的文本,输出结果时都出错!! 发表于 2008-08-16 19:15 ·  中国 广东 惠州 联通
初级用户
积分 20
发帖 8
注册 2008-08-16 18:27
17年会员
UID 123364
性别 男
状态 离线
已知三个文本:
_learned.txt 储存已学习的单词
_to_check.txt 储存用于对比的单词
_to_learn.txt 储存第二个文本中有而第一个文本中没有的单词

方法一:用findstr语句。

findstr /beivg:_learned.txt _to_check.txt>_to_learn.txt

结果:
① 效率很高
② 但是最后一行出现了多余的一行字,内容为:%i

方法二:用for语句

for /f %%i in (_to_check.txt) do (
findstr /ix "%%i" _learned.txt >nul
if ERRORLEVEL 1 echo %%i>>_to_learn.txt
)

结果:
① 效率很低
② 内容为off或on的行未被查出

===============
请问:
① 为什么第一种方法效率很高?为什么第二种方法效率很低?
② 为什么第一种方法会出现多余的%i?如何去掉?
③ 为什么第二种方法会查不出off和on?

[ Last edited by Karman on 2008-8-16 at 07:17 PM ]
2 发表于 2008-08-16 22:23 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线

findstr /b /e /i /v /g:_learned.txt _to_check.txt>_to_learn.txt

我测试的时候,没有发现问题。
能否把你的_learned.txt和_to_check.txt的内容贴出来看看?
3 文件比较长,我上传了! 发表于 2008-08-17 00:14 ·  中国 广东 惠州 联通
初级用户
积分 20
发帖 8
注册 2008-08-16 18:27
17年会员
UID 123364
性别 男
状态 离线
_to_check.txt
_learned.txt
执行结果在这里:
_to_learn.txt
注意最后一行。。。。

[ Last edited by Karman on 2008-8-17 at 12:18 AM ]
4 我这里的执行结果 发表于 2008-08-17 00:17 ·  中国 广东 惠州 联通
初级用户
积分 20
发帖 8
注册 2008-08-16 18:27
17年会员
UID 123364
性别 男
状态 离线
5 我知道原因了,谢谢! 发表于 2008-08-17 00:31 ·  中国 广东 惠州 联通
初级用户
积分 20
发帖 8
注册 2008-08-16 18:27
17年会员
UID 123364
性别 男
状态 离线
原来我的结果是以下代码产生的——

findstr /beivg:_learned.txt _to_check.txt>_to_learn.txt
::@for /f %%i in (_to_check.txt) do (
findstr /ix "%%i" _learned.txt >nul
if ERRORLEVEL 1 echo %%i>>_to_learn.txt
)

其中

if ERRORLEVEL 1 echo %%i>>_to_learn.txt

产生了多余的

%i

这一行!
6 发表于 2008-08-17 11:59 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
下次记得在顶楼把代码贴全,呵呵。
论坛跳转: