[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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”
在此表示万分感谢!
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2
BAT菜菜鸟!

自己看了N遍,也没发现问题,但是就是不行,请各位指教!
BAT菜菜鸟!

TOP

没解决啊,求解决,再次谢谢!
BAT菜菜鸟!

TOP

这段代码帮我解决了:
@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
1

评分人数

    • CrLf: 请把超过一行的代码放在code内PB -2
BAT菜菜鸟!

TOP

返回列表