Board logo

标题: [文本处理] [已解决]BAT批处理如何比较两个文件找到不同的? [打印本页]

作者: mjjwzp    时间: 2013-12-26 21:37     标题: [已解决]BAT批处理如何比较两个文件找到不同的?

本帖最后由 mjjwzp 于 2013-12-27 18:39 编辑

a.txt 文件
  1. 224.31.18.1
  2. 224.31.18.6
  3. 224.31.18.7
  4. 224.31.18.8
  5. 224.31.18.10
  6. 224.31.18.5
  7. 224.31.18.2
  8. 224.31.18.3
  9. 224.31.18.4
  10. 224.31.18.9
复制代码
b.txt文件
  1. 224.31.18.9
  2. 224.31.18.7
  3. 224.31.18.8
  4. 224.31.18.10
  5. 224.31.18.5
  6. 224.31.18.3
  7. 224.31.18.6
复制代码
比较a.txt,b.txt文件 把a.txt文件中多的出来的IP导入c.txt文件

请高手指点一下。谢谢!
作者: q2320069732    时间: 2013-12-26 22:20

谢谢指导谢谢指导谢谢指导谢谢指导
作者: 1270697389    时间: 2013-12-27 08:08

本帖最后由 1270697389 于 2013-12-27 16:46 编辑
  1. @echo off
  2. echo,b.txt里多的文件>c.txt
  3. for /f "delims=" %%i in ('findstr /ivlg:a.txt b.txt') do echo,%%i>>c.txt
  4. echo,a.txt里多的文件>>c.txt
  5. for /f "delims=" %%a in ('findstr /ivlg:b.txt a.txt') do echo,%%a>>c.txt
复制代码
不好意思写错了
作者: DAIC    时间: 2013-12-27 08:30

  1. findstr /v /x /g:b.txt a.txt > c.txt
复制代码

作者: DAIC    时间: 2013-12-27 08:31

回复 3# 1270697389


    /x 不能省略吧,否则结果可能错误。
作者: mjjwzp    时间: 2013-12-27 11:03

本帖最后由 mjjwzp 于 2013-12-27 11:09 编辑

回复 4# DAIC

“DAIC ” 的代码更接近要求,
返回的c.txt文件内容
  1. 224.31.18.1
  2. 224.31.18.6
  3. 224.31.18.2
  4. 224.31.18.4
  5. 224.31.18.9
复制代码
其它的结果都对,但返回的224.31.18.9 ,224.31.18.6这两个值a.txt,b.txt两个文件都有,谢谢指点!
作者: mjjwzp    时间: 2013-12-27 11:06

本帖最后由 mjjwzp 于 2013-12-27 11:25 编辑

回复 3# 1270697389
返回c.txt的内容
  1. b.txt里多的文件
  2. 224.31.18.6
  3. a.txt里多的文件
  4. %i
  5. %i
  6. %i
复制代码
没有按要求,找出多的,
但我发现代码中有点错误就是后面的,%%i改为%%a后,就正常了
  1. echo,a.txt里多的文件>>c.txt
  2. for /f "delims=" %%a in ('findstr /ivlg:b.txt a.txt') do echo,%%i>>c.txt
复制代码
改后c.txt文件的内容为
  1. b.txt里多的文件
  2. 224.31.18.6
  3. a.txt里多的文件
  4. 224.31.18.1
  5. 224.31.18.2
  6. 224.31.18.4
复制代码
a.txt里多的文件找的很准,但b.txt里多的文件找的不准,224.31.18.6两个文件a.txt,b.txt里面都有
最后请问:findstr /ivlg:是什么意思
谢谢你。请多多指点!
作者: terse    时间: 2013-12-27 12:09

从样本看最终C文件里是不应有 224.31.18.6 这条的
问题是否出在最后行没有回车的缘故
这样看下结果
  1. @echo off
  2. for %%i in (a b) do (
  3.     (for /f %%i in ('findstr /v $ "%%i.txt"') do echo.)>>"%%i.txt"
  4. )
  5. (findstr /ivxg:b.txt a.txt
  6. findstr /ivxg:a.txt b.txt
  7. )>>c.txt
复制代码

作者: mjjwzp    时间: 2013-12-27 15:42

回复 8# terse
运行后,224.31.18.6 出现了两次
结果如下
  1. 224.31.18.1
  2. 224.31.18.6
  3. 224.31.18.2
  4. 224.31.18.4
  5. 224.31.18.6
复制代码

作者: DAIC    时间: 2013-12-27 16:37

回复 6# mjjwzp


    请确保a.txt和b.txt最后一行是空行
作者: apang    时间: 2013-12-27 16:47

是不是每一行最后的空格引起的?这样试试:
  1. @echo off
  2. for %%i in (a b) do (
  3.     (for /f %%a in (%%i.txt) do echo,%%~nxa)>%%i.$
  4. )
  5. (
  6.     findstr /ivxg:b.$ a.$
  7.     findstr /ivxg:a.$ b.$
  8. )>c.txt
  9. del a.$ b.$
  10. pause
复制代码

作者: 1270697389    时间: 2013-12-27 17:07

我把你的数据测试了。没问题,你要确保你的每一组数据后面没有空格,如果相同的数据一个后面有空格一个没有就不行如果数据多难修改就把
  1. "delims=" 改成"delims= "就是=号后面加个空格。
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2