无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 3526|回复: 6
打印 上一主题 下一主题

批处理如何在文件中筛选,配对?

[复制链接]
跳转到指定楼层
1#
发表于 2011-9-8 10:01:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有一个文件 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 编辑 ]
2#
发表于 2011-9-8 13:00:23 | 只看该作者
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)
回复

使用道具 举报

3#
 楼主| 发表于 2011-9-9 21:24:25 | 只看该作者
经测试,还不能得到所需结果,后面的5/20 等端口没有了
回复

使用道具 举报

4#
发表于 2011-9-10 07:50:14 | 只看该作者
我这里只是提供一个方法,你就不能自己研究一下 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 编辑 ]
回复

使用道具 举报

5#
 楼主| 发表于 2011-9-11 22:56:46 | 只看该作者
不是没去研究,是对FOR 一循环就晕,罗缉太差
回复

使用道具 举报

6#
发表于 2011-9-12 09:50:24 | 只看该作者
原帖由 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"
复制代码
回复

使用道具 举报

7#
 楼主| 发表于 2011-9-13 10:25:18 | 只看该作者

回复 #6 x9tian 的帖子

谢谢两位兄台,x9tian 兄的方法不经中间文件,满足晒(平时搞硬件维护多,写程序是低手)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-2-26 08:03

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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