找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31463|回复: 11

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

[复制链接]
发表于 2013-12-26 21:37:38 | 显示全部楼层 |阅读模式
本帖最后由 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文件

请高手指点一下。谢谢!
发表于 2013-12-26 22:20:00 | 显示全部楼层
谢谢指导谢谢指导谢谢指导谢谢指导
发表于 2013-12-27 08:08:29 | 显示全部楼层
本帖最后由 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
复制代码
不好意思写错了

评分

参与人数 1技术 +1 收起 理由
mjjwzp + 1 谢谢

查看全部评分

发表于 2013-12-27 08:30:53 | 显示全部楼层
  1. findstr /v /x /g:b.txt a.txt > c.txt
复制代码
发表于 2013-12-27 08:31:27 | 显示全部楼层
回复 3# 1270697389


    /x 不能省略吧,否则结果可能错误。
 楼主| 发表于 2013-12-27 11:03:02 | 显示全部楼层
本帖最后由 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两个文件都有,谢谢指点!
 楼主| 发表于 2013-12-27 11:06:52 | 显示全部楼层
本帖最后由 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:是什么意思
谢谢你。请多多指点!
发表于 2013-12-27 12:09:21 | 显示全部楼层
从样本看最终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
复制代码
 楼主| 发表于 2013-12-27 15:42:08 | 显示全部楼层
回复 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
复制代码
发表于 2013-12-27 16:37:43 | 显示全部楼层
回复 6# mjjwzp


    请确保a.txt和b.txt最后一行是空行
发表于 2013-12-27 16:47:03 | 显示全部楼层
是不是每一行最后的空格引起的?这样试试:
  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
复制代码
发表于 2013-12-27 17:07:22 | 显示全部楼层
我把你的数据测试了。没问题,你要确保你的每一组数据后面没有空格,如果相同的数据一个后面有空格一个没有就不行如果数据多难修改就把
  1. "delims=" 改成"delims= "就是=号后面加个空格。
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 01:26 , Processed in 0.030057 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表