中国DOS联盟论坛

中国DOS联盟

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

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

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





积分 64
发帖 57
注册 2010-2-25
状态 离线
『楼 主』:  [已解决]如何作出两个文本文件的比较?

有二个文本文件(A.TXT)内容如下
C508
C50D
C511
E1E9
C517
E1E0
C548
C54C

另一个文本文件为B.TXT内容如下

C508        =>diversity(OK)
C50D        =>DAB(OK)
C511        =>antenna(OK)
E1E9        =>front (OK)
C517        =>GPSOK)
E1E0        =>W(OK)
C548        =>99(OK)
C54C        =>KK(OK)
9820        =>de(OK)
8r9fV        =>ae(NG)


要求实行批处理后在A.TXT的文件变为

C508
C50D
C511
E1E9
C517
E1E0
C548
C54C





C508        =>diversity(OK)
C50D        =>DAB(OK)
C511        =>antenna(OK)
E1E9        =>front (OK)
C517        =>GPSOK)
E1E0        =>W(OK)
C548        =>99(OK)
C54C        =>KK(OK)

[ Last edited by gcdj on 2010-12-2 at 07:44 ]

2010-11-25 08:09
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复
wewebb
初级用户





积分 66
发帖 53
注册 2009-10-9
状态 离线
『第 2 楼』:  


@echo off
(echo.&echo.
(for /f %%a in (a.txt) do (
        for /f "tokens=1*" %%x in (b.txt) do if "%%a" == "%%x" echo %%x   %%y   

     )
) ) > tmp.txt
type tmp.txt >> a.txt & del tmp.txt
a.txt
[ Last edited by wewebb on 2010-11-26 at 13:52 ]

2010-11-25 12:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
meteormiao
新手上路





积分 7
发帖 7
注册 2010-11-25
状态 离线
『第 3 楼』:  

置顶帖里有,真的,一模一样的问题

2010-11-25 21:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gcdj
初级用户





积分 64
发帖 57
注册 2010-2-25
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by meteormiao at 2010-11-25 21:43:
置顶帖里有,真的,一模一样的问题

在哪里呀?

能贴上来吗?

谢谢!

2010-11-26 07:41
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复
gcdj
初级用户





积分 64
发帖 57
注册 2010-2-25
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by wewebb at 2010-11-25 12:24:
[code]
(for /f %%a in (a.txt) do (
        for /f "tokens=1*" %%x in (b.txt) do if "%%a" == "%%x" echo %%x   %%y        )
echo.&echo.) > tmp.txt
type tmp.txt >> a.t ...

谢谢你!

这个实行之后a.txt变成下面的文件.我不想输出文件的录经.

而且每一行都比较了5次这是为什么?

C508
C50D
C511
E1E9
C517
E1E0
C548
C54C

Z:\work1>(for /F "tokens=1*" %x in (b.txt) do if "C508" == "%x" echo %x   %y         )

Z:\work1>if "C508" == "C508" echo C508   =>diversity(OK)         
C508   =>diversity(OK)        

Z:\work1>if "C508" == "C50D" echo C50D   =>DAB(OK)         

Z:\work1>if "C508" == "C511" echo C511   =>antenna(OK)         

Z:\work1>if "C508" == "E1E9" echo E1E9   =>front (OK)         

Z:\work1>if "C508" == "C517" echo C517   =>GPSOK)         

Z:\work1>if "C508" == "E1E0" echo E1E0   =>W(OK)         

Z:\work1>if "C508" == "C548" echo C548   =>99(OK)         

Z:\work1>if "C508" == "C54C" echo C54C   =>KK(OK)         

Z:\work1>if "C508" == "9820" echo 9820   =>de(OK)         

Z:\work1>if "C508" == "8r9fV" echo 8r9fV   =>ae(NG)         

Z:\work1>(for /F "tokens=1*" %x in (b.txt) do if "C50D" == "%x" echo %x   %y         )

Z:\work1>if "C50D" == "C508" echo C508   =>diversity(OK)         

Z:\work1>if "C50D" == "C50D" echo C50D   =>DAB(OK)         
C50D   =>DAB(OK)        

Z:\work1>if "C50D" == "C511" echo C511   =>antenna(OK)         

Z:\work1>if "C50D" == "E1E9" echo E1E9   =>front (OK)         

Z:\work1>if "C50D" == "C517" echo C517   =>GPSOK)         

Z:\work1>if "C50D" == "E1E0" echo E1E0   =>W(OK)         

Z:\work1>if "C50D" == "C548" echo C548   =>99(OK)         

Z:\work1>if "C50D" == "C54C" echo C54C   =>KK(OK)         

Z:\work1>if "C50D" == "9820" echo 9820   =>de(OK)         

Z:\work1>if "C50D" == "8r9fV" echo 8r9fV   =>ae(NG)         

Z:\work1>(for /F "tokens=1*" %x in (b.txt) do if "C511" == "%x" echo %x   %y         )

Z:\work1>if "C511" == "C508" echo C508   =>diversity(OK)         

Z:\work1>if "C511" == "C50D" echo C50D   =>DAB(OK)         

Z:\work1>if "C511" == "C511" echo C511   =>antenna(OK)         
C511   =>antenna(OK)        

Z:\work1>if "C511" == "E1E9" echo E1E9   =>front (OK)         

Z:\work1>if "C511" == "C517" echo C517   =>GPSOK)         

Z:\work1>if "C511" == "E1E0" echo E1E0   =>W(OK)         

Z:\work1>if "C511" == "C548" echo C548   =>99(OK)         

Z:\work1>if "C511" == "C54C" echo C54C   =>KK(OK)         

Z:\work1>if "C511" == "9820" echo 9820   =>de(OK)         

Z:\work1>if "C511" == "8r9fV" echo 8r9fV   =>ae(NG)         

Z:\work1>(for /F "tokens=1*" %x in (b.txt) do if "E1E9" == "%x" echo %x   %y         )

Z:\work1>if "E1E9" == "C508" echo C508   =>diversity(OK)         

Z:\work1>if "E1E9" == "C50D" echo C50D   =>DAB(OK)         

Z:\work1>if "E1E9" == "C511" echo C511   =>antenna(OK)         

Z:\work1>if "E1E9" == "E1E9" echo E1E9   =>front (OK)         
E1E9   =>front (OK)        

Z:\work1>if "E1E9" == "C517" echo C517   =>GPSOK)         

Z:\work1>if "E1E9" == "E1E0" echo E1E0   =>W(OK)         

Z:\work1>if "E1E9" == "C548" echo C548   =>99(OK)         

Z:\work1>if "E1E9" == "C54C" echo C54C   =>KK(OK)         

Z:\work1>if "E1E9" == "9820" echo 9820   =>de(OK)         

Z:\work1>if "E1E9" == "8r9fV" echo 8r9fV   =>ae(NG)         

Z:\work1>(for /F "tokens=1*" %x in (b.txt) do if "C517" == "%x" echo %x   %y         )

Z:\work1>if "C517" == "C508" echo C508   =>diversity(OK)         

Z:\work1>if "C517" == "C50D" echo C50D   =>DAB(OK)         

Z:\work1>if "C517" == "C511" echo C511   =>antenna(OK)         

Z:\work1>if "C517" == "E1E9" echo E1E9   =>front (OK)         

Z:\work1>if "C517" == "C517" echo C517   =>GPSOK)         
C517   =>GPSOK)        

Z:\work1>if "C517" == "E1E0" echo E1E0   =>W(OK)         

Z:\work1>if "C517" == "C548" echo C548   =>99(OK)         

Z:\work1>if "C517" == "C54C" echo C54C   =>KK(OK)         

Z:\work1>if "C517" == "9820" echo 9820   =>de(OK)         

Z:\work1>if "C517" == "8r9fV" echo 8r9fV   =>ae(NG)         

Z:\work1>(for /F "tokens=1*" %x in (b.txt) do if "E1E0" == "%x" echo %x   %y         )

Z:\work1>if "E1E0" == "C508" echo C508   =>diversity(OK)         

Z:\work1>if "E1E0" == "C50D" echo C50D   =>DAB(OK)         

Z:\work1>if "E1E0" == "C511" echo C511   =>antenna(OK)         

Z:\work1>if "E1E0" == "E1E9" echo E1E9   =>front (OK)         

Z:\work1>if "E1E0" == "C517" echo C517   =>GPSOK)         

Z:\work1>if "E1E0" == "E1E0" echo E1E0   =>W(OK)         
E1E0   =>W(OK)        

Z:\work1>if "E1E0" == "C548" echo C548   =>99(OK)         

Z:\work1>if "E1E0" == "C54C" echo C54C   =>KK(OK)         

Z:\work1>if "E1E0" == "9820" echo 9820   =>de(OK)         

Z:\work1>if "E1E0" == "8r9fV" echo 8r9fV   =>ae(NG)         

Z:\work1>(for /F "tokens=1*" %x in (b.txt) do if "C548" == "%x" echo %x   %y         )

Z:\work1>if "C548" == "C508" echo C508   =>diversity(OK)         

Z:\work1>if "C548" == "C50D" echo C50D   =>DAB(OK)         

Z:\work1>if "C548" == "C511" echo C511   =>antenna(OK)         

Z:\work1>if "C548" == "E1E9" echo E1E9   =>front (OK)         

Z:\work1>if "C548" == "C517" echo C517   =>GPSOK)         

Z:\work1>if "C548" == "E1E0" echo E1E0   =>W(OK)         

Z:\work1>if "C548" == "C548" echo C548   =>99(OK)         
C548   =>99(OK)        

Z:\work1>if "C548" == "C54C" echo C54C   =>KK(OK)         

Z:\work1>if "C548" == "9820" echo 9820   =>de(OK)         

Z:\work1>if "C548" == "8r9fV" echo 8r9fV   =>ae(NG)         

Z:\work1>(for /F "tokens=1*" %x in (b.txt) do if "C54C" == "%x" echo %x   %y         )

Z:\work1>if "C54C" == "C508" echo C508   =>diversity(OK)         

Z:\work1>if "C54C" == "C50D" echo C50D   =>DAB(OK)         

Z:\work1>if "C54C" == "C511" echo C511   =>antenna(OK)         

Z:\work1>if "C54C" == "E1E9" echo E1E9   =>front (OK)         

Z:\work1>if "C54C" == "C517" echo C517   =>GPSOK)         

Z:\work1>if "C54C" == "E1E0" echo E1E0   =>W(OK)         

Z:\work1>if "C54C" == "C548" echo C548   =>99(OK)         

Z:\work1>if "C54C" == "C54C" echo C54C   =>KK(OK)         
C54C   =>KK(OK)        

Z:\work1>if "C54C" == "9820" echo 9820   =>de(OK)         

Z:\work1>if "C54C" == "8r9fV" echo 8r9fV   =>ae(NG)

2010-11-26 07:44
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复
gcdj
初级用户





积分 64
发帖 57
注册 2010-2-25
状态 离线
『第 6 楼』:  

@echo off
if exist 1.txt del 1.txt
for /f "delims=: tokens=1*" %%a in (a.txt) do (
        for /f "delims=" %%_ in ('findstr "%%a" b.txt') do (
                if NOT "%%a:%%b"=="%%_" >>1.txt echo %%_
        )
)
start 1.txt

2010-11-26 08:04
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复
wewebb
初级用户





积分 66
发帖 53
注册 2009-10-9
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by gcdj at 2010-11-26 07:44:

这个实行之后a.txt变成下面的文件.我不想输出文件的录经.

而且每一行都比较了5次这是为什么?

...

不好意思。
复制代码的时候在上面漏了一行:  @echo off 。
现在重新编辑好了。

[ Last edited by wewebb on 2010-11-26 at 13:50 ]

2010-11-26 13:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gcdj
初级用户





积分 64
发帖 57
注册 2010-2-25
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by wewebb at 2010-11-26 13:48:



不好意思。
复制代码的时候在上面漏了一行:  @echo off 。
现在重新编辑好了。

[ Last edited by wewebb on 2010-11-26 at 13:50 ]

谢谢!

能否在加一个功能!

就是如果A文件里有的,B文件里没有的能否加上注释什么的?

2010-12-1 07:51
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by gcdj at 2010-12-1 07:51:
谢谢!
能否在加一个功能!
就是如果A文件里有的,B文件里没有的能否加上注释什么的?

没有说明在什么位置加注释,怎么加。。。
@echo off
for /f %%a in (A.txt) do set #%%a==
(echo/&echo/
for /f "tokens=1*" %%a in (B.txt) do if defined #%%a set #%%a=&echo %%a        %%b)>tmp_1.txt
(for /f %%a in (A.txt) do if defined #%%a (echo %%a;仅A.txt有) else echo %%a)>tmp_2.txt
copy /b tmp_2.txt+tmp_1.txt A.txt>nul
del /q tmp_*
这里将注释加在上半部分

[ Last edited by Hanyeguxing on 2010-12-1 at 09:44 ]

   此帖被 +1 点积分    点击查看详情   
评分人:【 wewebb 分数: +1  时间:2010-12-1 11:20




批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-12-1 09:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wewebb
初级用户





积分 66
发帖 53
注册 2009-10-9
状态 离线
『第 10 楼』:  

LS 以“#变量名” 作为 “比较字符串” 的思路很好。呵呵。

2010-12-1 11:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 11 楼』:  


@echo off
(
for /f "tokens=1*" %%a in (B.txt) do set #%%a==
for /f %%a in (A.txt) do if defined #%%a (echo %%a) else echo %%a;仅A.txt有
echo/&echo/
findstr /b /g:A.txt B.txt 2>nul
)>tmp.txt
del /q A.txt
ren tmp.txt A.txt




批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-12-1 13:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gcdj
初级用户





积分 64
发帖 57
注册 2010-2-25
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by Hanyeguxing at 2010-12-1 13:14:
[code]@echo off
(
for /f "tokens=1*" %%a in (B.txt) do set #%%a==
for /f %%a in (A.txt) do if defined #%%a (echo %%a) else echo %%a;仅A.txt有
echo/&echo/
findstr /b /g:A.txt B. ...

问题已解决!谢谢!!

2010-12-2 07:43
查看资料  发送邮件  发短消息 网志  OICQ (12403198)  编辑帖子  回复  引用回复
acaigg
初级用户





积分 115
发帖 92
注册 2010-12-24
状态 离线
『第 13 楼』:  

只有学习的份

2010-12-25 12:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: