中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 01:36
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [求助]如何比较并输出两个文本的不同之处
可打印版本  1,592 / 13
第1楼 junyee 发表于 2009-11-25 15:53
中级用户 发帖 112 积分 253
[求助]如何比较并输出两个文本的不同之处
今有两个文件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 可以比较文本,但他生成的结果不太直观

比较是以行为单位,可以使用外部命令.
第2楼 ZJHJ 发表于 2009-11-25 21:43
高级用户 发帖 374 积分 609
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
第3楼 lxmxn 发表于 2009-11-26 03:13
版主 发帖 4,938 积分 11,386
第4楼 junyee 发表于 2009-11-27 18:25
中级用户 发帖 112 积分 253
Originally posted by lxmxn at 2009-11-26 03:13:


大哥,这个不是批处理啊???Linux???
第5楼 ZJHJ 发表于 2009-11-27 21:13
高级用户 发帖 374 积分 609
2楼的您不会 用啊
第6楼 junyee 发表于 2009-11-27 23:21
中级用户 发帖 112 积分 253
Originally posted by ZJHJ at 2009-11-27 21:13:
2楼的您不会 用啊
,

谢谢您的回复,不过,请问,您试过有效了吗>>>???
第7楼 HAT 发表于 2009-11-28 01:19
版主 发帖 5,017 积分 9,023
Re 6楼
测试之前,需要自己去下载一个grep.exe
第8楼 honcho 发表于 2009-11-28 12:28
初级用户 发帖 9 积分 25
@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
第9楼 junyee 发表于 2009-11-28 12:41
中级用户 发帖 112 积分 253
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版主热心解答,您给的办法也是可行的.
第10楼 ZJHJ 发表于 2009-11-28 21:30
高级用户 发帖 374 积分 609
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 ]
第11楼 honcho 发表于 2009-11-29 01:32
初级用户 发帖 9 积分 25
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)
第12楼 junyee 发表于 2010-02-01 22:47
中级用户 发帖 112 积分 253
谢谢楼上诸位。
上述三种方法都是可行的。
findstr 这个我能看懂,可是执行效率似乎低了些,处理10K的文本要近20秒。
grep 这个需要第三方程序,并且,文本不能太大,到几K的时候程序就会报错。
10/11Floor 这个很神奇,可是我看不明白呀,能不能帮忙解释一下这个用法??。

setlocal
...
endlocal


????
第13楼 ldr2zjj 发表于 2010-02-03 20:15
初级用户 发帖 95 积分 167
怎麼不用FC呢???FC是用來比較不同的啊~~但是我不會寫
第14楼 lovebaby001 发表于 2010-10-01 16:18
新手上路 发帖 12 积分 12
我在网上找到一个最简单的代码

比较1.txt和2.txt,然后把结果输出到text.txt中去

需对比的文件内容复制到1.txt
把另一个含有不同内容的文件内容复制到2.txt

把以下代码保存成*.bat文件

fc 1.txt 2.txt > text.txt

然后双击批处理文件生成text.txt文件



来源自:www.Pay-4u.Com
完整原文网址:http://www.pay-4u.com/article/18046.html
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023