本帖最后由 xuwenwen 于 2011-11-4 22:05 编辑
各位大侠好,我想用批处理,先做ipconfig>ipconfig.txt然后在里面提取IP地址作为变量a,XP中,需要的字段是最后一个,因此我用如下代码执行顺利:- ipconfig>ipconfig.txt
- Setlocal enabledelayedexpansion
- for /f "tokens=2 delims=:" %%i in ('ipconfig^|find /i "IP address"') do (
- set str=%%j
- set a=!str: =!
- )
复制代码 成功将我需要的最后一个符合条件的IP地址设置成变量a
但是在WIN7下,ipconfig命令把我要的字符串放在第一个,FOR执行后面的那一行没用的,win7里,ipconfig生成的文件如下:
Windows IP 配置
PPP 适配器 SINLALA:
连接特定的 DNS 后缀 . . . . . . . :
IPv4 地址 . . . . . . . . . . . . : abc.def.xx.sdf
子网掩码 . . . . . . . . . . . . : 255.255.255.255
默认网关. . . . . . . . . . . . . :
以太网适配器 本地连接:
连接特定的 DNS 后缀 . . . . . . . :
本地链接 IPv6 地址. . . . . . . . : md80::mana:9str:f850:459%12
IPv4 地址 . . . . . . . . . . . . : 192.168.1.2
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.1.1
隧道适配器 isatap.{638A9D5C-E7B8-4PX5-90TC-3S9E9C853M7L}:
媒体状态 . . . . . . . . . . . . : 媒体已断开
连接特定的 DNS 后缀 . . . . . . . :
后面还有一大串废物数据,我不再写了,我上面写的代码只提取了以太网适配器里的IP,而不是PPP适配器里的IP,如果是后面的好办,skip就可以搞定,但是这个需要怎么搞定?我只要PPP适配器里的 IPv4 地址 . . . . . . . . . . . . : abc.def.xx.sdf冒号后面的IP作为变量a,本地连接适配器里的 IPv4 地址 . . . . . . . . . . . . : 192.168.1.2不需要。有的电脑里,不全是我这种状况,有时候,PPP适配器信息处在第二个甚至第三个位置,他们所在的行数不是固定的。
于是经高人指点,写了如下代码:- @echo off&setlocal enabledelayedexpansion
- ipconfig > ipconfig.txt
- for /f "delims=" %%i in (ipconfig.txt) do (
- set "line=%%i"
- rem set "str=%%i"
- rem set str=!str: =!
- set /a keynum+=1
- if "!line:~0,3!" equ "PPP" (set keynum=0)
- rem echo=!keynum!==%%i
- if !keynum!==2 (
- for /f "tokens=15 delims=: " %%a in ("%%i") do (
- set str=%%a
- echo=!str!
- )
- )
- )
- route add -4 xxx.xxx.xxx.xxx mask255.255.255.0 %a%
- del ipconfig.txt
- pause
复制代码 但是执行结果没准确的获取变量!上面这段代码有问题么?如果有问题,应该怎么改?
我准备把变量a作为静态路由的一个参数,设置静态路由表。
注:
PPP适配器是我建立的VPN连接,用的是ppptp,连接名字叫SINLALA
论坛里有一篇文章,讨论的也是win7下,IP地址获取问题,我也参考过了,相应修改了一下代码,结果运行后显示:此时不应该有“tokens=1,16”
在此表示万分感谢! |