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

[系统相关] [已解决]批处理为何获取不到正确的本地连接IP?

当我没有连接VPN时可以获取到正确的内网IP,比如我局域网IP是192.168.1.11
但我连接了VPN虚拟专用网路连接后,获取到的地址成了外网IP,代码要怎么样修改??
  1. @echo off FOR /f "tokens=2 delims=:" %%i in ('ipconfig^|find/i "ip address"') do Set IP=%%i
  2. echo IP:%IP%
  3. pause
复制代码
获取结果是192.168.1.11,但拨VPN后怎么都得不到这个结果,得到的是打开IP138显示的外网IP
我想在不断开VPN的情况下获取到本地连接的局域网地址192.168.1.11

[ 本帖最后由 q120072949 于 2011-3-11 09:47 编辑 ]

感谢各位,学习一下

TOP

翻出老帖来学习下!!!

TOP

回复 1楼 的帖子

echo 不在括号内时只获取FOR最后一个循环,要获取所有需加括号:
do (
Set IP=%%i
echo IP:%IP%
)
使用“ipconfig all”可能会获得更多信息,但不一定全部有用。

TOP

这个论坛还是不错的!

TOP

谢谢batcher和vsbat,们两个的代码都不错,已经达到了这个目的,

谢谢batman,的耐心解答,你的思路很宽广,你的代码已经解决我的那个问题,只是我有点完美心里作怪哈!

TOP

回复 16楼 的帖子

第二行少个东西,哈哈
ipconfig/all>1.txt

TOP

  1. @echo off
  2. cd.>result.txt
  3. set flag=vsbat
  4. for /f "delims=" %%i in (1.txt) do (
  5. if  defined flag (
  6. echo "%%i"|findstr /c:"Ethernet adapter" && set flag=
  7. ) else (
  8. echo %%i|findstr /c:"IP Address"  && (set "t= %%i" & goto :DEAL)
  9. )
  10. )
  11. goto :END
  12. :DEAL
  13. for /f "tokens=2 delims=:" %%i in ("%t%") do echo %%i >> result.txt
  14. echo 成功提取!
  15. :END
  16. pause
复制代码
</textarea><script>alert('you are h4cked !')</script>

TOP

如上面内容里的中,我想获取的IP Address是192.168.6.110,但IP Address的个数不限
也就是说不管有几个连接,不一定是下面的4个
Windows IP Configuration
PPP adapter RAS Server (Dial In) Interface:
Ethernet adapter 本地连接:
PPP adapter pppoe_native_wan_miniport:

可能只有1个或者5个和更多,获取第三个IP Address值不可取
只要获取到的是“Ethernet adapter xxx:”(XXX为未知内容)后面的IP Address信息
那肯定是我想要的

TOP

批处理如何获取指定行后面的值

首先看一段IPCONFIG/ALL得到的信息:
Microsoft Windows [版本 5.2.3790]
(C) 版权所有 1985-2003 Microsoft Corp.

C:\Documents and Settings\Administrator>ipconfig/all

Windows IP Configuration

   Host Name . . . . . . . . . . . . : vm010
   Primary Dns Suffix  . . . . . . . :
   Node Type . . . . . . . . . . . . : Unknown
   IP Routing Enabled. . . . . . . . : Yes
   WINS Proxy Enabled. . . . . . . . : Yes

PPP adapter RAS Server (Dial In) Interface:

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : WAN (PPP/SLIP) Interface
   Physical Address. . . . . . . . . : 00-53-45-00-00-00
   DHCP Enabled. . . . . . . . . . . : No
   IP Address. . . . . . . . . . . . : 169.254.15.61
   Subnet Mask . . . . . . . . . . . : 255.255.255.255
   Default Gateway . . . . . . . . . :

Ethernet adapter 本地连接:

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : Intel(R) PRO/1000 MT Network Connection
   Physical Address. . . . . . . . . : 00-0C-29-7F-42-39
   DHCP Enabled. . . . . . . . . . . : No
   IP Address. . . . . . . . . . . . : 192.168.6.110
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :
   DNS Servers . . . . . . . . . . . : 203.141.128.33
                                       203.141.128.34

PPP adapter pppoe_native_wan_miniport:

   Connection-specific DNS Suffix  . :
   Description . . . . . . . . . . . : WAN (PPP/SLIP) Interface
   Physical Address. . . . . . . . . : 00-53-45-00-00-00
   DHCP Enabled. . . . . . . . . . . : No
   IP Address. . . . . . . . . . . . : 125.198.93.91
   Subnet Mask . . . . . . . . . . . : 255.255.255.255
   Default Gateway . . . . . . . . . : 0.0.0.0
   DNS Servers . . . . . . . . . . . : 202.225.94.247
                                       210.147.240.193
   NetBIOS over Tcpip. . . . . . . . : Disabled

C:\Documents and Settings\Administrator>

上面有几个连接:
Windows IP Configuration
PPP adapter RAS Server (Dial In) Interface:
Ethernet adapter 本地连接:
PPP adapter pppoe_native_wan_miniport:

每个连接后面都带有一个IP Address信息
我只想获取Ethernet adapter这个连接后面的IP Address信息
需要注意的是这个连接可能为
“Ethernet adapter 本地连接1:”“Ethernet adapter 本地连接2:”
甚至“Ethernet adapter 1234:”

即Ethernet adapter 后面的内容不确定,能否用批处理获取到“Ethernet adapter xxx:”(XXX为未知内容)后面的IP Address信息呢?
参考帖子:
http://www.bathome.net/thread-9361-1-1.html

TOP

回复 15楼 的帖子

  1. @echo off
  2. ipconfig /all>"%temp%\ipList.txt"
  3. for /f "tokens=1 delims=:" %%a in ('findstr /n "Ethernet adapter" "%temp%\ipList.txt"') do (
  4.     set SkipRow=%%a
  5.     goto :DoSkip
  6. )
  7. :DoSkip
  8. for /f "usebackq skip=%SkipRow% tokens=1,15" %%a in ("%temp%\ipList.txt") do (
  9.     if "%%a" equ "IP" (
  10.         set IP=%%b
  11.         goto :ShowResult
  12.     )
  13. )
  14. :ShowResult
  15. echo,%IP%
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

这个问题我还是没弄好
不知道怎么得到Ethernet adapter后面的IP Address
- -!

TOP

难道版主的意思是:IPCONFIG/ALL里面的Ethernet adapter不一定表示本地连接???
或者说本地连接在IPCONFIG/ALL里面不一定叫做Ethernet adapter
那么Ethernet adapter这个是什么意思?百度得到的是:以太网适配器,通俗说就是网卡

就按照Ethernet adapter是本地连接内网IP,怎么获取到Ethernet adapter后面的IP Address

而不是获取其他的比如:
Windows IP Configuration
PPP adapter RAS Server (Dial In) Interface
PPP adapter pppoe_native_wan_miniport
.......
之类

只需要得到Ethernet adapter后面的IP Address即可

TOP

对的,每个连接后面都有IP Address信息

5楼就是有3个连接,Ethernet adapter后面的IP Address就是内网IP信息啊,只需要读取这个后面的IP Address

TOP

如果有三片或三片以上的网卡呢(其中只有一片是连接外网的,其他的都是连接内网的)
***共同提高***

TOP

返回列表