Board logo

标题: 如何比较两TXT中的内容 ,并去叫其中一个的相同内容 [打印本页]

作者: hy433124shc     时间: 2007-3-25 11:49    标题: 如何比较两TXT中的内容 ,并去叫其中一个的相同内容

1.TXT 中有 FIND 的结果
[7458] c:\my\123.mp3
[7456] c:\my\12345.mp3
2.txt 中有
[7458] c:\my\123.mp3

现我想得到1.TXT 内容为
[7456] c:\my\12345.mp3

作者: vkill     时间: 2007-3-25 12:32
搜索 "重复“

作者: lxmxn     时间: 2007-3-26 08:06

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

作者: xtyga     时间: 2007-3-27 13:58
又学到东东了

作者: hzzlh     时间: 2007-3-28 11:17
也有一个类似的问题,三楼的只是把 c:\my\12345.mp3 当作字符串在1.txt中寻找吧, 如果2.txt 中有多行呢 ?
比如:
1.TXT 中有 FIND 的结果
c:\my\123.mp3
c:\my\12345.mp3
c:\my\12.mp3
c:\my\1.mp3
2.txt 中有
c:\my\123.mp3
c:\my\12345.mp3
c:\my\12.mp3
c:\my\123456.mp3
想得到一个3.txt,里边是
c:\my\1.mp3
c:\my\123456.mp3

该怎么实现呢?
高手指教。。。。


又:
翻了以前的一些帖子,其中有个删除相同行的,个人感觉很好,可是怎么也想不出该怎样用在这里,代码如下:

@echo off
echo 正在查找文本相同行,请等待.....
(echo 清除重复行后的文件内容:& echo.)>str_.txt

setlocal enabledelayedexpansion
for /f "delims=" %%i in (test.txt) do (
if not defined %%i set %%i=A & echo %%i>>str_.txt)

echo 清理完毕,清理后的文件保存在:str_.txt
pause>nul

Last edited by hzzlh on 2007-3-27 at 10:24 PM ]

作者: 9527     时间: 2007-3-29 00:22
确实是这样,FINDSTR处理这样的效果确实不太理想,先给你个暂时的方案吧,试试下面的代码


@echo off&setlocal
for /f "delims=" %%a in ('^(more^<1.txt^&more^<2.txt^)^|sort') do call:ppp "%%a"
<nul,set/p=%a%
goto:eof
:ppp
if not defined a (set a=%1&goto:eof)
if %a% equ %1 (set "a="&goto:eof) else (<nul,set/p=%a%&echo/)
set a=%1
goto:eof

作者: hzzlh     时间: 2007-3-29 05:35
谢谢9527,经测试,可以解决这个问题。
只是这句不太明白

in ('^(more^<1.txt^&more^<2.txt^)^|sort')

查了一下 sort ,应该是排序吧,那么这句话是什么意思呢?

可不可以解释一下呢。。。

再次感谢!!!

作者: hzzlh     时间: 2007-3-29 10:41
自己也尝试着写了一个,代码如下:

echo 重的:>1.txt
echo 非重:>2.txt
for /f %%i in (test1.txt) do call:find &&i
pause

:find
set %%i=%1
for /f %%j in (test2.txt) do(
if findstr %1 echo %1>>1.txt else echo %%j>>2.txt
)

可是总是报错,不知哪里错了呢?
D:\bat>new

D:\bat>echo 重的: 1>1.txt

D:\bat>echo 非重: 1>2.txt

D:\bat>for /F %i in (test1.txt) do call:find && i

D:\bat>call:find && i

D:\bat>set %i=
此时不应有 do(。

D:\bat>for /f %j in (test2.txt) do(

D:\bat>


想不通啊。。。。。。