中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 18:55
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何比较两个文本内容的差别
楼 主 如何比较两个文本内容的差别 发表于 2006-08-31 02:07 ·  中国 广东 佛山 电信
初级用户
积分 74
发帖 31
注册 2006-08-26 03:38
UID 61291
状态 离线
假如 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 ]
2 发表于 2006-08-31 02:38 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  以前有过类似的讨论帖子,一下子找不到了,干脆把以前发的完整代码发出来,你可以借鉴一下思路:

@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没商量。
考虑问题复杂化,解决问题简洁化。
3 发表于 2006-08-31 02:45 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  考虑到你是新手,一下子难以理解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没商量。
考虑问题复杂化,解决问题简洁化。
4 发表于 2006-08-31 08:32 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  今天闲着没事,把3楼的代码拉出来玩了一把,结果让我大吃一惊:3.txt的内容是
c:\windows\21.txt
c:\windows\123.txt
c:\my doc

而非楼主所说的
c:\windows\123.txt
c:\my doc


  我的妈呀,又在阴沟里翻船了。唉,现在的楼主真难伺候呀。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
5 发表于 2006-08-31 15:36 ·  中国 广东 江门 电信
初级用户
积分 74
发帖 31
注册 2006-08-26 03:38
UID 61291
状态 离线
谢谢各位,但我试过用这种方法但有的不能完成替换的比如最后名是LNK,

for /f "delims==" %%i in (1.txt) do findstr /l /i /x "%%i" "2.txt" ||if %errorlevel% == 0 echo %%i >>3.txt
6 发表于 2006-08-31 15:39 ·  中国 甘肃 张掖 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
>>3.txt echo %%i

楼上这个倒过来写也可以啊,为什么?
7 发表于 2006-09-04 13:09 ·  中国 广东 江门 鹤山市 电信
初级用户
积分 74
发帖 31
注册 2006-08-26 03:38
UID 61291
状态 离线
目前还没有人能解决呀,
8 发表于 2006-09-04 13:31 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
Originally posted by hhh246 at 2006-9-4 13:09:
目前还没有人能解决呀,


  真的吗?

  你动手测试了上面的代码了吗?你能保证你在顶楼的表述没有错误吗?
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
9 发表于 2006-09-08 08:52 ·  中国 广东 江门 蓬江区 电信
初级用户
积分 74
发帖 31
注册 2006-08-26 03:38
UID 61291
状态 离线
for /f "delims==" %%i in (1.log) do (
find /i "%%i" "2.log" || echo %%i>>b.txt
)

可以了,但速度相当慢,谁能写出多线程的吗?
10 发表于 2006-09-08 11:24 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
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没商量。
考虑问题复杂化,解决问题简洁化。
11 发表于 2006-09-11 00:08 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
UID 50550
状态 离线
findstr /v /x /g:1.txt 2.txt
12 发表于 2006-09-18 21:19 ·  中国 广东 佛山 广东睿江科技有限公司
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  3742668 版主的代码极度简洁高效,PF。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
论坛跳转: