[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]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文件

请高手指点一下。谢谢!

谢谢指导谢谢指导谢谢指导谢谢指导

TOP

本帖最后由 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

评分人数

初九的冬天

TOP

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

TOP

回复 3# 1270697389


    /x 不能省略吧,否则结果可能错误。

TOP

本帖最后由 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两个文件都有,谢谢指点!

TOP

本帖最后由 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:是什么意思
谢谢你。请多多指点!

TOP

从样本看最终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
复制代码

TOP

回复 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
复制代码

TOP

回复 6# mjjwzp


    请确保a.txt和b.txt最后一行是空行

TOP

是不是每一行最后的空格引起的?这样试试:
  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
复制代码

TOP

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

TOP

返回列表