Board logo

标题: [文本处理] 【已解决】bat 过滤添加字符的问题 [打印本页]

作者: Linux9253    时间: 2015-8-13 10:19     标题: 【已解决】bat 过滤添加字符的问题

  1. C:\>route print
  2. IPv4 Route Table
  3. ===========================================================================
  4. Interface List
  5. 0x1 ........................... MS TCP Loopback interface
  6. 0x10003 ...00 0c 29 02 6e 05 ...... Intel(R) PRO/1000 MT Network Connection
  7. ===========================================================================
  8. ===========================================================================
  9. Active Routes:
  10. Network Destination        Netmask          Gateway       Interface  Metric
  11.           0.0.0.0          0.0.0.0     192.168.12.2     192.168.12.4      1
  12.         127.0.0.0        255.0.0.0        127.0.0.1        127.0.0.1      1
  13.      192.168.12.0    255.255.255.0     192.168.12.4     192.168.12.4     10
  14.      192.168.12.4  255.255.255.255        127.0.0.1        127.0.0.1     10
  15.    192.168.12.255  255.255.255.255     192.168.12.4     192.168.12.4     10
  16.         224.0.0.0        240.0.0.0     192.168.12.4     192.168.12.4     10
  17.   255.255.255.255  255.255.255.255     192.168.12.4     192.168.12.4      1
  18. Default Gateway:      192.168.12.2
  19. ===========================================================================
  20. Persistent Routes:
  21.   Network Address          Netmask  Gateway Address  Metric
  22.           0.0.0.0          0.0.0.0     192.168.12.2       1
  23. C:\>
复制代码
上面是一个route print执行的结果(行数是不固定的)、现在我想取出  Persistent Routes:  下面的所有行(行数是不固定的)、保存到文件1.txt

然后再对1.txt文件做操作、成命令形式、比如上面的   0.0.0.0          0.0.0.0     192.168.12.2       1  

也可能是多行内容、要变成  route add  0.0.0.0  mask    0.0.0.0     192.168.12.2    metric   1   命令格式  处理好后保存到2.txt里面

最后把1.txt 2.txt合并到3.txt

格式是

Network Address          Netmask  Gateway Address  Metric
          0.0.0.0          0.0.0.0     192.168.12.2       1

Route command
         route add  0.0.0.0  mask    0.0.0.0     192.168.12.2    metric   1   

然后删除文件1.txt,2.txt 求大神帮忙、这对我来说太难了。。。
作者: flyinnet9    时间: 2015-8-13 11:27

本帖最后由 flyinnet9 于 2015-8-13 11:28 编辑
  1. ::获取行号,格式可能不同,自己改分隔符
  2. for /f "tokens=1 delims=[]" %%a in ('route print ^|find /n "Persistent Routes"') do set row=%%a
  3. ::打印指定内容
  4. route print |more +%row% >1.txt
复制代码
其他的用for 很容易取到
作者: Linux9253    时间: 2015-8-13 11:49

本帖最后由 Linux9253 于 2015-8-13 12:20 编辑

回复 2# flyinnet9


    谢谢哈、我已经完全实现了功能了、帮大忙了、再次感谢
作者: Linux9253    时间: 2015-8-13 12:34

回复 2# flyinnet9


    觉得你的思路很好、还有一个问题想让你帮忙
  1. Microsoft Windows [版本 5.2.3790]
  2. (C) 版权所有 1985-2003 Microsoft Corp.
  3. C:\Documents and Settings\Administrator>ipconfig
  4. Windows IP Configuration
  5. Ethernet adapter 本地连接 2:
  6.    Connection-specific DNS Suffix  . :
  7.    IP Address. . . . . . . . . . . . : 10.131.80.51
  8.    Subnet Mask . . . . . . . . . . . : 255.255.255.128
  9.    Default Gateway . . . . . . . . . :
  10. Ethernet adapter 本地连接 3:
  11.    Connection-specific DNS Suffix  . :
  12.    IP Address. . . . . . . . . . . . : 12.21.1.91
  13.    Subnet Mask . . . . . . . . . . . : 255.255.255.192
  14.    Default Gateway . . . . . . . . . : 12.21.1.126
  15. C:\Documents and Settings\Administrator>
复制代码
取出
本地连接 2: 10.131.80.51
本地连接 3: 12.21.1.91
它们的对应关系
作者: flyinnet9    时间: 2015-8-13 14:31

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a n=1
  4. for /f "tokens=2 delims=:" %%a in ('ipconfig ^|find "IP Address"') do (
  5.   set /a n+=1
  6.   set ip!n!=%%a
  7. )
  8. for /l %%a in (2 1 !n!) do echo 本地连接%%a !ip%%a!
复制代码

作者: Linux9253    时间: 2015-8-13 14:46

回复 5# flyinnet9


    不好意思、刚才在忙、没看到、我测试了、非常完美、真厉害、非常感谢、真是难者不会,会者不难啊、
作者: Linux9253    时间: 2015-8-14 11:06

回复 2# flyinnet9


    您好、关于过滤路由表的问题、我发现服务器上是IPv4一个、IPv6一个、现在怎么把第一个Persistent Routes: 到 IPv6 Route Table 之间的行提取出来呢?
  1. IPv4 Route Table
  2. ===========================================================================
  3. Interface List
  4. 0x1 ........................... MS TCP Loopback interface
  5. 0x10003 ...00 0c 29 02 6e 05 ...... Intel(R) PRO/1000 MT Network Connection
  6. ===========================================================================
  7. ===========================================================================
  8. Active Routes:
  9. Network Destination        Netmask          Gateway       Interface  Metric
  10.           0.0.0.0          0.0.0.0     192.168.12.2     192.168.12.4      1
  11.   255.255.255.255  255.255.255.255     192.168.12.4     192.168.12.4      1
  12. Default Gateway:      192.168.12.2
  13. ===========================================================================
  14. Persistent Routes:
  15.   Network Address          Netmask  Gateway Address  Metric
  16.           0.0.0.0          0.0.0.0     192.168.12.2       1
  17.      192.168.12.0    255.255.255.0     192.168.12.1       1
  18. IPv6 Route Table
  19. ===========================================================================
  20. Interface List
  21.   5 ...00 0c 29 02 6e 05 ...... Intel(R) PRO/1000 MT Network Connection
  22.   4 ...ff ff ff ff ff ff ff ff  Teredo Tunneling Pseudo-Interface
  23. ===========================================================================
  24. ===========================================================================
  25. Active Routes:
  26. If Metric Network Destination      Gateway
  27.   1   1004 ::1/128                  ::1
  28.   1   1008 ff00::/8                 On-link
  29.   1   1004 fe80::1/128              fe80::1
  30. ===========================================================================
  31. Persistent Routes:
  32.   None
复制代码

作者: flyinnet9    时间: 2015-8-14 14:33

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. route print >tmp
  4. for /f "tokens=1 delims=:" %%a in ('findstr /n /c:"Persistent Routes" tmp') do if not defined row1 set row1=%%a
  5. for /f "tokens=1 delims=:" %%a in ('findstr /n /c:"IPv6 Route Table" tmp') do set row2=%%a
  6. set /a m=%row2%-%row1%
  7. for /f "delims=" %%a in ('more +%row1% tmp') do (
  8.    set /a n+=1
  9.    if !n! lss %m% (echo %%a) else (del tmp /q>nul&goto :eof)
  10. )>>result.txt
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2