无忧启动论坛

标题: 批处理如何在文件中筛选,配对? [打印本页]

作者: ccccpp    时间: 2011-9-8 10:01
标题: 批处理如何在文件中筛选,配对?
有一个文件 wkdxz.zip (1.02 KB, 下载次数: 39) ,取一小段
....
Internet  192.27.219.1     1         0021.973f.45ee  arpa   FastEthernet 6/0.470
Internet  192.27.219.30    --        001a.a93a.20f9  arpa   FastEthernet 6/0.470
Internet  192.27.220.5     14        0040.481c.fbe0  arpa   FastEthernet 6/0.440
Internet  192.27.220.3     0         0013.c44a.7615  arpa   FastEthernet 6/0.440
Internet  192.27.220.30    --        001a.a93a.20f9  arpa   FastEthernet 6/0.440
....
470        0021.973f.45ee       DYNAMIC  FastEthernet 5/20
399        001a.a93a.20f9       DYNAMIC  GigabitEthernet 6/25
400        0001.29a3.d4ea       DYNAMIC  FastEthernet 6/17
400        0001.29a3.d4ee       DYNAMIC  FastEthernet 6/14
400        0001.29a3.de47       DYNAMIC  FastEthernet 6/23
400        0001.6c9f.43ff       DYNAMIC  FastEthernet 6/2
...
批处理如何能筛选相应的MAC地址,并配对IP相关行,把"DYNAMIC"改写为相应的IP地址

470        0021.973f.45ee       192.27.219.1  FastEthernet 5/20
399        001a.a93a.20f9       192.27.219.30  GigabitEthernet 6/25
400        0001.29a3.d4ea       192.27.208.23  FastEthernet 6/17
400        0001.29a3.d4ee       192.27.208.25  FastEthernet 6/14
400        0001.29a3.de47       192.27.208.24  FastEthernet 6/23
400        0001.6c9f.43ff          192.27.208.10  FastEthernet 6/2
或者不改"DYNAMIC",在后面增加"空格+IP地址"

470        0021.973f.45ee       DYNAMIC  FastEthernet 5/20 192.27.219.1
399        001a.a93a.20f9       DYNAMIC  GigabitEthernet 6/25 192.27.219.30
400        0001.29a3.d4ea       DYNAMIC  FastEthernet 6/17 192.27.208.23
400        0001.29a3.d4ee       DYNAMIC  FastEthernet 6/14 192.27.208.25
400        0001.29a3.de47       DYNAMIC  FastEthernet 6/23 192.27.208.24
400        0001.6c9f.43ff       DYNAMIC  FastEthernet 6/2 192.27.208.10

[ 本帖最后由 ccccpp 于 2011-9-12 09:44 编辑 ]
作者: dos时代菜鸟    时间: 2011-9-8 13:00
windows 的cmd下可以完成这个功能。

首先把 wkdxz.txt 中的两部分内容中的后一部分剪切到 wkdxz2.txt 中
然后编辑如下批处理
--------
@echo off && setlocal ENABLEDELAYEDEXPANSION
if exist wkdxz3.txt del wkdxz3.txt
for /f "tokens=2,4" %%c in (wkdxz.txt) do (
for /f "tokens=1,2,4" %%i in (wkdxz2.txt) do (
   if %%d*==%%j*  (echo %%i %%j %%c %%k >>wkdxz3.txt)
)
)
-------------
就会得到 wkdxz3.txt ,这个 wkdxz3.txt 就是你要的结果。

cmd1.rar (1.34 KB, 下载次数: 31)
作者: ccccpp    时间: 2011-9-9 21:24
经测试,还不能得到所需结果,后面的5/20 等端口没有了
作者: dos时代菜鸟    时间: 2011-9-10 07:50
我这里只是提供一个方法,你就不能自己研究一下 for 的用法么?

注意下面的红色修改部分!!!!!

@echo off && setlocal ENABLEDELAYEDEXPANSION
if exist wkdxz3.txt del wkdxz3.txt
for /f "tokens=2,4" %%c in (wkdxz.txt) do (
for /f "tokens=1,2,4,5" %%i in (wkdxz2.txt) do (
   if %%d*==%%j*  (echo %%i %%j %%c %%k %%l>>wkdxz3.txt)
)
)

[ 本帖最后由 dos时代菜鸟 于 2011-9-10 07:53 编辑 ]
作者: ccccpp    时间: 2011-9-11 22:56
不是没去研究,是对FOR 一循环就晕,罗缉太差
作者: x9tian    时间: 2011-9-12 09:50
原帖由 ccccpp 于 2011-9-9 21:24 发表
经测试,还不能得到所需结果,后面的5/20 等端口没有了


思路: 设MAC为变量,赋IP为值

  1. @echo off&setlocal enabledelayedexpansion
  2. rem 成文本中簺选出 初始文本
  3. for /f "tokens=2,4 delims= " %%i in ('type "%~dp0wkdxz.txt" ^|findstr /i /m "internet amd"') do set "%%j=%%i"
  4. REM 成文本中簺选出 預取理文本  并按此生存符合要求的文本
  5. (for /f "tokens=1,2,3* delims= " %%i in ('type "%~dp0wkdxz.txt" ^|find /i "DYNAMIC"') do echo.%%i  %%j  !%%j!  %%l)>"%~dp0IP_MAC.txt"
复制代码

作者: ccccpp    时间: 2011-9-13 10:25
标题: 回复 #6 x9tian 的帖子
谢谢两位兄台,x9tian 兄的方法不经中间文件,满足晒(平时搞硬件维护多,写程序是低手)




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3