Board logo

标题: 如何比较两个文本内容的差别 [打印本页]

作者: hhh246     时间: 2006-8-31 02:07    标题: 如何比较两个文本内容的差别

假如 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 ]
作者: namejm     时间: 2006-8-31 02:38
  以前有过类似的讨论帖子,一下子找不到了,干脆把以前发的完整代码发出来,你可以借鉴一下思路:
@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

作者: namejm     时间: 2006-8-31 02:45
  考虑到你是新手,一下子难以理解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

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


  我的妈呀,又在阴沟里翻船了。唉,现在的楼主真难伺候呀。
作者: hhh246     时间: 2006-8-31 15:36
谢谢各位,但我试过用这种方法但有的不能完成替换的比如最后名是LNK,

for /f "delims==" %%i in (1.txt) do findstr /l /i /x "%%i" "2.txt" ||if %errorlevel% == 0 echo %%i >>3.txt
作者: vkill     时间: 2006-8-31 15:39
>>3.txt echo %%i

楼上这个倒过来写也可以啊,为什么?
作者: hhh246     时间: 2006-9-4 13:09
目前还没有人能解决呀,
作者: namejm     时间: 2006-9-4 13:31


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

  真的吗?

  你动手测试了上面的代码了吗?你能保证你在顶楼的表述没有错误吗?
作者: hhh246     时间: 2006-9-8 08:52
for /f "delims==" %%i in (1.log) do (
find /i "%%i" "2.log" || echo %%i>>b.txt
)

可以了,但速度相当慢,谁能写出多线程的吗?
作者: namejm     时间: 2006-9-8 11:24


  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 ]
作者: 3742668     时间: 2006-9-11 00:08

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

作者: namejm     时间: 2006-9-18 21:19
  3742668 版主的代码极度简洁高效,PF。