Board logo

标题: {已结}请问如何比较文件内容-用于比较MAC地址 [打印本页]

作者: chainliq     时间: 2007-3-10 11:01    标题: {已结}请问如何比较文件内容-用于比较MAC地址
文件a.txt里的内容如下: 192.168.2.1:00-E0-4C-F7-0C-E5 192.168.2.2:00-E0-4C-F7-0C-E3 192.168.2.3:00-E0-4C-F7-05-E4 192.168.2.4:00-E0-4C-F6-A8-BB 192.168.2.5:00-E0-4C-F7-05-E5 192.168.2.6:00-E0-4C-F5-E3-A1 192.168.2.7:00-E0-4C-F6-CD-06 192.168.2.8:00-E0-4C-F7-0C-F3 192.168.2.9:00-E0-4C-F5-E2-FD 文件b.txt里的内容如下: 192.168.2.1:00-E0-4C-F7-0C-E5 192.168.2.2:00-00-4C-F7-0C-E3 192.168.2.3:00-E0-4C-F7-05-E4 192.168.2.4:00-E0-4C-F6-A8-BB 192.168.2.5:00-E0-4C-F7-05-E5 192.168.2.6:00-E0-4C-F5-E3-A1 192.168.2.7:00-E0-4C-F6-CD-06 192.168.2.8:00-E0-4C-F7-0C-F3 192.168.2.9:00-E0-4C-F5-E2-FD 效果,如文件b.txt中的IP:192.168.2.2: 与文件a.txt中的IP:192.168.2.2: 这一行相比,如发现在后面的MAC地址改变则>>1.txt 请问批处理怎么做呀 [ Last edited by chainliq on 2007-3-10 at 11:14 PM ]

作者: youxi01     时间: 2007-3-10 12:28
其它的项目,比如:192.168.2.1,192.168.2.3等不需要检查吗?

作者: lxmxn     时间: 2007-3-10 12:32
@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
[ Last edited by lxmxn on 2007-3-10 at 06:10 PM ]

作者: youxi01     时间: 2007-3-10 12:53
也贴一段来玩玩:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2 delims=:" %%i in (a.txt) do set "%%i=%%j"

echo ============================
echo 文档a.txt和b.txt中的mac改动的有:
echo.
for /f "tokens=1,2 delims=:" %%i in (b.txt) do (
   if /i not "!%%i!"=="%%j" (
      echo %%i %%j
      if "%%i"=="192.168.2.2" set flag=1
   )
) 
echo -----------------------------
echo 其中:
if defined flag (echo 192.168.2.2 之 mac已经改动。) else 192.168.2.2 之mac未改动。
echo ==============================

pause>nul

作者: chainliq     时间: 2007-3-10 22:34
Originally posted by youxi01 at 2007-3-10 12:28: 其它的项目,比如:192.168.2.1,192.168.2.3等不需要检查吗?
要呀,要不然,那样就好做喽,``要检查的是几百向MAC呀``

作者: chainliq     时间: 2007-3-10 22:39
lxmxn 兄弟的好像运行啦没反应哦`

作者: ccwan     时间: 2007-3-10 22:57
@echo off
for /f "tokens=1* delims=-" %%i in (a.txt) do (
    for /f "tokens=1* delims=-" %%a in (b.txt) do (
        if "%%i"=="%%a" if not "%%j"=="%%b" >>1.txt echo %%a-%%b
    )
)
pause

作者: test266     时间: 2007-3-10 23:07
@echo off rem ip的顺序可以打乱 setlocal ENABLEDELAYEDEXPANSION set t1=!time! set /a num=1 for /f "tokens=1,2 delims=:" %%i in (b.txt) do ( set ip!num!=%%i set mac!num!=%%j set /a num+=1 ) for /f "tokens=1,2 delims=:" %%i in (a.txt) do ( for /L %%a in (1,1,!num!) do ( if "!ip%%a!"=="%%i" ( if not "!mac%%a!"=="%%j" echo !ip%%a!:!mac%%a! vs %%i:%%j ) ) ) echo 比较行数:%num% echo 开始时间:%t1% echo 结束时间:!time!

作者: chainliq     时间: 2007-3-10 23:13
呵呵,高手真多哦,``哎,刚才是我没用好,其实lxmxn兄的是可以用的```谢谢各位哦,其他各位的也不错,哎,惭愧哈,要向你们学习学习`,试过啦`都行`呵呵``

作者: test266     时间: 2007-3-10 23:35
4楼的代码,效率实在是太高了,佩服啊!!

作者: slore     时间: 2007-3-11 02:41
Originally posted by test266 at 2007-3-10 10:35: 4楼的代码,效率实在是太高了,佩服啊!!
汗~#4貌似只检测那一个是不是相等……你改其他的就不管。。。失败的代码……不要提什么效率。 ◎echo off echo XXX.XX.XX.X exit 这个效率呢?汗~

作者: youxi01     时间: 2007-3-11 03:14
上楼的兄弟才好似没看懂代码吧

作者: slore     时间: 2007-3-11 03:34
if defined flag (echo 192.168.2.2 之 mac已经改动。) else 192.168.2.2 之mac未改动。 如果192.168.2.3改变了呢?你的代码输出什么? 要么都做要么就不要画蛇添足。。不要加这个直接echo %%i %j就好了。 fc a.txt b.txt命令试过么?

作者: ccwan     时间: 2007-3-11 03:48
不要争论啦,每个人解决问题的方法不一样,这是好事,可以开阔思路不是吗? 我来一句话解决它吧。
findstr /v /g:b.txt a.txt >1.txt

作者: youxi01     时间: 2007-3-11 04:35
呵呵,回来了。 本人原文的意思是先找出所有的已经改动的 mac, 然后再判断 IP 192.168.2.2 的mac是否改动。 原来的想法是这样可能更贴切楼主的意思,可能是我错了。

作者: youxi01     时间: 2007-3-11 04:43
To: CCWan 兄的 findstr /v /g:b.txt a.txt >1.txt 似乎要改成 findstr /v /g:b.txt a.txt >>1.txt 更合理一点吧

作者: ccwan     时间: 2007-3-11 04:46
re youxi01 这倒没有必要,因为它是一次性比较文本全部内容的,不像for是依次循环,所以即使有很多不同,也会全部输出。 这也是我试验之后发现的,兄可以试试看。

作者: youxi01     时间: 2007-3-11 05:04
收到,明白,谢谢。

作者: lxmxn     时间: 2007-3-11 07:13
Originally posted by chainliq at 2007-3-10 09:39: lxmxn 兄弟的好像运行啦没反应哦`
  我一开始写的时候测试是正确的,可能你把你a.txt和b.txt文件的内容改变了一下,所以导致你说的“运行没有反应”。   代码已经更新了,你再试试?

作者: chainliq     时间: 2007-3-13 04:26
`嗯,都行啦```呵呵``这个主要是想防arp呀``这样的话,``我重新收集一下下面机子的MAC,做比较后就知道哪台中标喽`,``呵呵``,各位兄弟的方法都很好``呵呵``学习当中`` [ Last edited by chainliq on 2007-3-13 at 04:28 AM ]

作者: SunRiseBoy     时间: 2007-6-29 00:47
楼主的问题设计有问题: 如果我是一个其中的mac,原来的IP我用254,我变成100而没有任何mac再使用254这个IP你怎么发现我? 应该是先对前后mac进行判断再看IP是否变化报告MAC的设计才合理! 尽管我很菜,看不懂楼上高手的一些命令,但LZ的思路我认为的确是存在问题! [ Last edited by SunRiseBoy on 2007-6-29 at 12:57 AM ]

作者: ccwan     时间: 2007-6-29 08:31
大家的代码都是从比较两个文本的不同出发的,相信楼主也是这个意思吧。

作者: skystar65     时间: 2009-1-5 04:21
Originally posted by ccwan at 2007-3-11 03:48 AM: 不要争论啦,每个人解决问题的方法不一样,这是好事,可以开阔思路不是吗? 我来一句话解决它吧。
findstr /v /g:b.txt a.txt >1.txt
太强大了!我写了一个晚上的批处理都没搞定 版版一句代码就搞定了。。。