中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何比较并输出两个文本的不同之处
作者:
标题: [求助]如何比较并输出两个文本的不同之处 上一主题 | 下一主题
junyee
中级用户




积分 253
发帖 112
注册 2006-5-31
状态 离线
『楼 主』:  [求助]如何比较并输出两个文本的不同之处

今有两个文件a.txt b.txt ,内容假设如下 ----a.txt----(这句是注释) 1 2 3 4 5 ----end----(这句也是注释,下同) ----b.txt---- 1 b 3 4 5 6 ----end---- 如何通过批处理生成, ----a-b.txt----(a有但b没有的内容) 2 ----end---- ----b-a.txt----(b有但a没有的内容) b ----end---- ----a~b.txt----(a,b都有的内容) 1 3 4 5 6 ----end---- 请教各位坛友,P处理有没有可能实现这样的效果 我知道系统中有一个fc 可以比较文本,但他生成的结果不太直观 比较是以行为单位,可以使用外部命令.


2009-11-25 15:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 2 楼』:  

cd.>bh.txt for /f "delims=" %%i in (a.txt) do SET %%i=A for /f "delims=" %%j in (b.txt) do if /I not defined %%j echo %%j>>bh.txt ------------------- cd.>bh.txt for /f "delims=" %%i in (a.txt) do SET %%i=A for /f "delims=" %%j in (b.txt) do if /I defined %%j echo %%j>>bh.txt


2009-11-25 21:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 3 楼』:  

root@~ > grep -xvfb.txt a.txt
2

root@~ > grep -xvfa.txt b.txt
b

root@~ > grep -xfa.txt b.txt
1
3
4
5
6

root@~ >


2009-11-26 03:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
junyee
中级用户




积分 253
发帖 112
注册 2006-5-31
状态 离线
『第 4 楼』:  

Originally posted by lxmxn at 2009-11-26 03:13:
root@~ > grep -xvfb.txt a.txt
2

root@~ > grep -xvfa.txt b.txt
b

root@~ > grep -xfa.txt b.txt
1
3
4
5
6

root@~ >
大哥,这个不是批处理啊???Linux???


2009-11-27 18:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 5 楼』:  

2楼的您不会 用啊


2009-11-27 21:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
junyee
中级用户




积分 253
发帖 112
注册 2006-5-31
状态 离线
『第 6 楼』:  

Originally posted by ZJHJ at 2009-11-27 21:13: 2楼的您不会 用啊
, 谢谢您的回复,不过,请问,您试过有效了吗>>>???


2009-11-27 23:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 7 楼』:  Re 6楼

测试之前,需要自己去下载一个grep.exe




2009-11-28 01:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
honcho
初级用户





积分 25
发帖 9
注册 2009-10-17
状态 离线
『第 8 楼』:  

@echo off cd.>a-b.txt cd.>b-a.txt cd.>a~b.txt for /f "delims=" %%i in (a.txt) do ( findstr /i "%%i" b.txt > nul || echo %%i>>a-b.txt ) for /f "delims=" %%i in (b.txt) do ( findstr /i "%%i" a.txt > nul || echo %%i>>b-a.txt ) for /f "delims=" %%i in (a.txt) do ( findstr /i "%%i" b.txt > nul && echo %%i>>a~b.txt ) pause


2009-11-28 12:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
junyee
中级用户




积分 253
发帖 112
注册 2006-5-31
状态 离线
『第 9 楼』:  

Originally posted by honcho at 2009-11-28 12:28: @echo off cd.>a-b.txt cd.>b-a.txt cd.>a~b.txt for /f "delims=" %%i in (a.txt) do ( findstr /i "%%i" b.txt > nul || echo %%i>>a-b.txt ) for /f "deli ...
谢谢 .很好用, 另感谢lxmxn版主热心解答,您给的办法也是可行的.


2009-11-28 12:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 10 楼』:  

Originally posted by junyee at 2009-11-27 23:21: , 谢谢您的回复,不过,请问,您试过有效了吗>>>???
是你实在太太.......不会了..... setlocal EnableDelayedExpansion cd.>1.txt for /f "delims=" %%i in (b.txt) do SET %%i=A for /f "delims=" %%j in (a.txt) do if /I not defined %%j echo %%j>>1.txt endlocal EnableDelayedExpansion cd.>2.txt for /f "delims=" %%i in (a.txt) do SET %%i=A for /f "delims=" %%j in (b.txt) do if /I not defined %%j echo %%j>>2.txt setlocal cd.>3.txt for /f "delims=" %%i in (a.txt) do SET %%i=A for /f "delims=" %%j in (b.txt) do if /I defined %%j echo %%j>>3.txt 处理你的文件只要0.07秒 比第 8 楼的代码效率快26.7倍 [ Last edited by ZJHJ on 2009-11-28 at 22:01 ]


2009-11-28 21:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
honcho
初级用户





积分 25
发帖 9
注册 2009-10-17
状态 离线
『第 11 楼』:  

Originally posted by ZJHJ at 2009-11-28 21:30: 是你实在太太.......不会了..... setlocal EnableDelayedExpansion cd.>1.txt for /f "delims=" %%i in (b.txt) do SET %%i=A for /f "delims=" %%j in (a.txt) do if ...
很赞同,此法效率极高。 另:本着最简优效的原则, 第三个环境无须改变即可。 setlocal cd.>1.txt for /f "delims=" %%i in (b.txt) do SET %%i=A for /f "delims=" %%j in (a.txt) do if /I not defined %%j echo %%j>>1.txt endlocal cd.>2.txt cd.>3.txt for /f "delims=" %%i in (a.txt) do SET %%i=A for /f "delims=" %%j in (b.txt) do if /I not defined %%j (echo %%j>>2.txt) else (echo %%j>>3.txt)


2009-11-29 01:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
junyee
中级用户




积分 253
发帖 112
注册 2006-5-31
状态 离线
『第 12 楼』:  

谢谢楼上诸位。 上述三种方法都是可行的。 findstr 这个我能看懂,可是执行效率似乎低了些,处理10K的文本要近20秒。 grep 这个需要第三方程序,并且,文本不能太大,到几K的时候程序就会报错。 10/11Floor 这个很神奇,可是我看不明白呀,能不能帮忙解释一下这个用法??。 setlocal ... endlocal ????


2010-2-1 22:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ldr2zjj
初级用户





积分 167
发帖 95
注册 2007-5-6
状态 离线
『第 13 楼』:  

怎麼不用FC呢???FC是用來比較不同的啊~~但是我不會寫


2010-2-3 20:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lovebaby001
新手上路





积分 12
发帖 12
注册 2010-3-24
状态 离线
『第 14 楼』:  

我在网上找到一个最简单的代码 比较1.txt和2.txt,然后把结果输出到text.txt中去 需对比的文件内容复制到1.txt 把另一个含有不同内容的文件内容复制到2.txt 把以下代码保存成*.bat文件 fc 1.txt 2.txt > text.txt 然后双击批处理文件生成text.txt文件 来源自:www.Pay-4u.Com 完整原文网址:www.pay-4u.com/artic ...


2010-10-1 16:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: