找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25977|回复: 3

[网络连接] [已解决]win7下批处理如何获取IP地址?与论坛里已有的问题不同

[复制链接]
发表于 2011-10-25 13:56:23 | 显示全部楼层 |阅读模式
本帖最后由 xuwenwen 于 2011-11-4 22:05 编辑

各位大侠好,我想用批处理,先做ipconfig>ipconfig.txt然后在里面提取IP地址作为变量a,XP中,需要的字段是最后一个,因此我用如下代码执行顺利:
  1. ipconfig>ipconfig.txt
  2. Setlocal enabledelayedexpansion
  3. for /f "tokens=2 delims=:" %%i in ('ipconfig^|find /i "IP address"') do (
  4.     set str=%%j
  5.     set a=!str: =!
  6. )
复制代码
成功将我需要的最后一个符合条件的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适配器信息处在第二个甚至第三个位置,他们所在的行数不是固定的。
于是经高人指点,写了如下代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. ipconfig > ipconfig.txt
  3. for /f "delims=" %%i in (ipconfig.txt) do (
  4.                 set "line=%%i"
  5.                 rem set "str=%%i"
  6.                 rem set str=!str: =!
  7.                 set /a keynum+=1
  8.                 if "!line:~0,3!" equ "PPP" (set keynum=0)
  9.                 rem echo=!keynum!==%%i
  10.                 if !keynum!==2 (
  11.                         for /f "tokens=15 delims=: " %%a in ("%%i") do (
  12.                         set str=%%a
  13.                         echo=!str!
  14.                         )
  15.                 )
  16. )
  17. route add -4 xxx.xxx.xxx.xxx mask255.255.255.0 %a%
  18. del ipconfig.txt
  19. pause
复制代码
但是执行结果没准确的获取变量!上面这段代码有问题么?如果有问题,应该怎么改?
我准备把变量a作为静态路由的一个参数,设置静态路由表。
注:
PPP适配器是我建立的VPN连接,用的是ppptp,连接名字叫SINLALA
论坛里有一篇文章,讨论的也是win7下,IP地址获取问题,我也参考过了,相应修改了一下代码,结果运行后显示:此时不应该有“tokens=1,16”
在此表示万分感谢!

评分

参与人数 1PB +2 收起 理由
CrLf + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2011-10-26 14:41:19 | 显示全部楼层
自己看了N遍,也没发现问题,但是就是不行,请各位指教!
 楼主| 发表于 2011-11-4 17:12:23 | 显示全部楼层
没解决啊,求解决,再次谢谢!
 楼主| 发表于 2011-11-4 22:04:17 | 显示全部楼层
这段代码帮我解决了:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('ipconfig') do (
        set "var=%%i"&set "str=!var: =!"
        if "!str:~0,6!"=="PPP适配器" set flag=a
        if defined flag (
                if "!str:~0,6!"=="IPv4地址" (
                        set "str=!var:*:=!"
                        set "a=!str:~1!"
                        set "flag="
                )
        )
)
echo %a%
pause

评分

参与人数 1PB -2 收起 理由
CrLf -2 请把超过一行的代码放在code内

查看全部评分

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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 05:42 , Processed in 0.010989 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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