中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何比较两个文本内容的差别
作者:
标题: 如何比较两个文本内容的差别 上一主题 | 下一主题
hhh246
初级用户





积分 74
发帖 31
注册 2006-8-26
状态 离线
『楼 主』:  如何比较两个文本内容的差别

假如 1.txt 内容 如果在2.txt 中有相同替换为空白

1.txt
c:\windows
c:\windows\12.txt

2.txt
c:\windows
c:\windows\21.txt
c:\windows\123.txt
c:\my doc

输出为 3.txt
c:\windows\123.txt
c:\my doc

[ Last edited by namejm on 2007-2-5 at 10:24 AM ]

2006-8-31 02:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 2 楼』:  

  以前有过类似的讨论帖子,一下子找不到了,干脆把以前发的完整代码发出来,你可以借鉴一下思路:
@echo off
:: 比较A文件夹和B文件夹下文件名的异同(A和B文件夹下均无子目录)
:: 如果有不同,A文件夹中不同的写入a.txt,B文件夹中不同的写入b.txt
:: 相同部分的文件名写入c.txt
cd.>a.txt
cd.>b.txt
cd.>c.txt
dir /a-d /b "A文件夹的路径">list_a.txt
dir /a-d /b "B文件夹的路径">list_b.txt
for /f "delims=" %%i in (list_a.txt) do (
    find "%%i" list_b.txt>nul 2>nul && echo %%i>>c.txt || echo %%i>>a.txt
)
for /f "delims=" %%i in (list_b.txt) do (
    find "%%i" list_a.txt>nul 2>nul || echo %%i>>b.txt
)
del /q list_a.txt>nul 2>nul
del /q list_b.txt>nul 2>nul
start a.txt
start b.txt
start c.txt




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-8-31 02:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 3 楼』:  

  考虑到你是新手,一下子难以理解2楼的完整代码,针对你这个问题,为你量身定做一段代码吧:
@echo off
cd.>3.txt
for /f "tokens=*" %%i in (2.txt) do (
    find "%%i" 1.txt || >>3.txt echo %%i
)
start 3.txt




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-8-31 02:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 4 楼』:  

  今天闲着没事,把3楼的代码拉出来玩了一把,结果让我大吃一惊:3.txt的内容是
c:\windows\21.txt
c:\windows\123.txt
c:\my doc
而非楼主所说的
c:\windows\123.txt
c:\my doc


  我的妈呀,又在阴沟里翻船了。唉,现在的楼主真难伺候呀。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-8-31 08:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hhh246
初级用户





积分 74
发帖 31
注册 2006-8-26
状态 离线
『第 5 楼』:  

谢谢各位,但我试过用这种方法但有的不能完成替换的比如最后名是LNK,

for /f "delims==" %%i in (1.txt) do findstr /l /i /x "%%i" "2.txt" ||if %errorlevel% == 0 echo %%i >>3.txt

2006-8-31 15:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 6 楼』:  

>>3.txt echo %%i

楼上这个倒过来写也可以啊,为什么?

2006-8-31 15:39
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
hhh246
初级用户





积分 74
发帖 31
注册 2006-8-26
状态 离线
『第 7 楼』:  

目前还没有人能解决呀,

2006-9-4 13:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by hhh246 at 2006-9-4 13:09:
目前还没有人能解决呀,

  真的吗?

  你动手测试了上面的代码了吗?你能保证你在顶楼的表述没有错误吗?



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-4 13:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hhh246
初级用户





积分 74
发帖 31
注册 2006-8-26
状态 离线
『第 9 楼』:  

for /f "delims==" %%i in (1.log) do (
find /i "%%i" "2.log" || echo %%i>>b.txt
)

可以了,但速度相当慢,谁能写出多线程的吗?

2006-9-8 08:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by hhh246 at 2006-9-8 08:52:
for /f "delims==" %%i in (1.log) do (
find /i "%%i" "2.log" || echo %%i>>b.txt
)

可以了,但速度相当慢,谁能写出多线程的吗?

  速度慢吗?除非你处理的是上W行的文本。

  多线程?呵呵,CMD是单任务模式的,不可能实现多线程。

[ Last edited by namejm on 2006-9-8 at 11:26 ]



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-8 11:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 11 楼』:  


findstr /v /x /g:1.txt 2.txt


2006-9-11 00:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 12 楼』:  

  3742668 版主的代码极度简洁高效,PF。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-18 21:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: