Board logo

标题: [网络连接] 思路征集:批处理获取本地连接的名称 [打印本页]

作者: Batcher    时间: 2008-8-30 18:25     标题: 思路征集:批处理获取本地连接的名称

中文系统,默认是"本地连接";英文系统,默认是"Local Area Connection";其它语言操作系统,未知;此外,用户还可能自己修改了本地连接的名称。如何用批处理来获取本地连接的名称呢?我先抛个砖:
  1. @echo off
  2. rem 获取本地连接名称
  3. rem WinXP SP2 EN 测试通过
  4. rem WinXP SP3 CS 测试通过
  5. reg export "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards" "%temp%\MyNet.reg" >nul
  6. for /f "tokens=1 delims=:" %%a in ('type "%temp%\MyNet.reg"^|findstr /n Ethernet') do (
  7. set "DstRow=%%a"
  8. goto :next
  9. )
  10. goto :eof
  11. :next
  12. set /a SkpRow=DstRow-2
  13. for /f "skip=%SkpRow% tokens=2 delims={}" %%a in ('type "%temp%\MyNet.reg"^|findstr .*') do (
  14. for /f "skip=6 tokens=*" %%b in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{%%a}\Connection"') do (
  15. set LcoNet=%%b
  16. call echo %%LcoNet:~12%%
  17. goto :eof
  18. )
  19. )
复制代码
感谢8楼提供的测试用例!
作者: pusofalse    时间: 2008-8-30 18:41

  1. @echo off
  2. for /f "tokens=2 delims==" %%a in ('wmic nic get netconnectionid /value') do set "var=%%a"&call echo %%var%%&pause>nul&exit/b
复制代码
中文版系统测试通过,英文版我没有测试环境,还请BATCHER兄测试。
-----------------------------------------------
我发帖了才想起2K中貌似没有WMIC,要适用于所有系统吗?

[ 本帖最后由 pusofalse 于 2008-8-30 18:47 编辑 ]
作者: pusofalse    时间: 2008-8-30 18:59

测试BATCHER兄的代码出错:
  1. C:\Documents and Settings\Administrator\桌面>(for /F "skip=6 tokens=*" %b in ('r
  2. eg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-
  3. E325-11CE-BFC1-08002BE10318}\{5FBB2E38-FBE8-4F2D-908A-88FA06960529}\Connection"'
  4. ) do (
  5. set LcoNet=%b
  6. call set LcoNet=%LcoNet:        =%
  7. call echo %LcoNet:~10%
  8. goto :eof
  9. ) )
  10. 错误: 系统找不到指定的注册表项或值
复制代码
  1. Microsoft Windows XP [版本 5.1.2600]
  2. (C) 版权所有 1985-2001 Microsoft Corp.
  3. C:\Documents and Settings\Administrator\桌面>reg query "HKEY_LOCAL_MACHINE\SYSTE
  4. M\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{5FBB
  5. 2E38-FBE8-4F2D-908A-88FA06960529}\Connection"
  6. 错误: 系统找不到指定的注册表项或值
复制代码

作者: Batcher    时间: 2008-8-30 19:15     标题: 回复 3楼 的帖子

你的注册表里面有没有这个分支:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{5FBB2E38-FBE8-4F2D-908A-88FA06960529}\Connection

能否把你的本地连接所在的注册表分支贴出来看看?应该在这个下面的其中一个:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\
作者: Batcher    时间: 2008-8-30 19:18     标题: 回复 2楼 的帖子

WinXP SP2 EN 测试结果
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Test>test.bat
ECHO is off.

C:\Test>wmic nic get netconnectionid /value

NetConnectionID=
NetConnectionID=
NetConnectionID=
NetConnectionID=
NetConnectionID=
NetConnectionID=
NetConnectionID=
NetConnectionID=
NetConnectionID=
NetConnectionID=
NetConnectionID=Local Area Connection
NetConnectionID=
NetConnectionID=Wireless Network Connection
NetConnectionID=
NetConnectionID=1394 Connection
NetConnectionID=
NetConnectionID=
NetConnectionID=
NetConnectionID=VMware Network Adapter VMnet1
NetConnectionID=VMware Network Adapter VMnet8
NetConnectionID=

作者: pusofalse    时间: 2008-8-30 19:23

这是我的注册表信息,能找到本地连接,但不在{5FBB2E38-FBE8-4F2D-908A-88FA06960529}这个项里。
  1. Windows Registry Editor Version 5.00
  2. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}]
  3. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\Descriptions]
  4. "Broadcom NetLink (TM) Gigabit Ethernet"=hex(7):31,00,00,00,00,00
  5. "Intel(R) PRO/Wireless 3945ABG Network Connection"=hex(7):31,00,00,00,00,00
  6. "1394 网络适配器"=hex(7):31,00,00,00,00,00
  7. "数据包计划程序微型端口"=hex(7):31,00,00,00,32,00,00,00,33,00,00,00,34,00,00,00,35,00,00,\
  8.   00,00,00
  9. "WAN 微型端口 (Network Monitor)"=hex(7):31,00,00,00,00,00
  10. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{5765CB79-7D9F-443E-849D-51EAB9A8895E}]
  11. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{5765CB79-7D9F-443E-849D-51EAB9A8895E}\Connection]
  12. "PnpInstanceID"="PCI\\VEN_8086&DEV_4222&SUBSYS_10028086&REV_02\\4&192AC53F&0&00E0"
  13. "MediaSubType"=dword:00000002
  14. "Name"="无线网络连接"
  15. "IpCheckingEnabled"=dword:00000000
  16. "ShowIcon"=dword:00000001
  17. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{5D4BF871-B3AC-4806-869C-B859C0B73BC3}]
  18. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{5D4BF871-B3AC-4806-869C-B859C0B73BC3}\Connection]
  19. "PnpInstanceID"="PCI\\VEN_14E4&DEV_169C&SUBSYS_207517AA&REV_03\\4&6B16D5B&0&38F0"
  20. "MediaSubType"=dword:00000001
  21. "Name"="本地连接"
  22. "IpCheckingEnabled"=dword:00000000
  23. "ShowIcon"=dword:00000001
  24. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{7F63BF53-CFEF-482C-95E8-DBE1B67EFB39}]
  25. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{7F63BF53-CFEF-482C-95E8-DBE1B67EFB39}\Connection]
  26. "PnpInstanceID"="V1394\\NIC1394\\C1C18EC09F00"
  27. "MediaSubType"=dword:00000005
  28. "Name"="1394 连接"
  29. "IpCheckingEnabled"=dword:00000000
复制代码

作者: Batcher    时间: 2008-8-30 19:29

reg export导出的"%temp%\MyNet.reg"里面有没有{5D4BF871-B3AC-4806-869C-B859C0B73BC3}?
第一个for命令有没有正确的把{5D4BF871-B3AC-4806-869C-B859C0B73BC3}所在行赋值给变量DstRow?
作者: pusofalse    时间: 2008-8-30 19:35

这是提取的信息:
  1. Windows Registry Editor Version 5.00
  2. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards]
  3. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\10]
  4. "ServiceName"="{5765CB79-7D9F-443E-849D-51EAB9A8895E}"
  5. "Description"="Intel(R) PRO/Wireless 3945ABG Network Connection"
  6. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\11]
  7. "ServiceName"="{7F63BF53-CFEF-482C-95E8-DBE1B67EFB39}"
  8. "Description"="1394 网络适配器"
  9. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\2]
  10. "ServiceName"="{5D4BF871-B3AC-4806-869C-B859C0B73BC3}"
  11. "Description"="Broadcom NetLink (TM) Gigabit Ethernet"
  12. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\9]
  13. "ServiceName"="{5FBB2E38-FBE8-4F2D-908A-88FA06960529}"
  14. "Description"="Realtek RTL8139 Family PCI Fast Ethernet NIC"
复制代码

作者: Batcher    时间: 2008-8-30 19:59     标题: 回复 8楼 的帖子

知道原因了,双网卡。修改一下第一个for命令就行了,我稍后在顶楼更新。
作者: HAT    时间: 2009-10-3 10:42

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set count=0
  4. for /f "delims=:" %%a in ('ipconfig^|find /i "Ethernet adapter"') do (
  5.   set /a count+=1
  6.   call :GetName "%%a" !count!
  7. )
  8. for /f "tokens=2 delims==" %%a in ('set LocalConn_') do (
  9.   echo/%%a
  10. )
  11. goto :eof
  12. :GetName
  13. set "str=%1"
  14. set LocalConn_%2=%str:~18,-1%
复制代码

作者: rat    时间: 2009-10-3 11:21

nbtstat -n
作者: lxzzr    时间: 2009-10-6 10:40

netsh interface show interface
作者: Batcher    时间: 2009-10-6 12:03     标题: 回复 12楼 的帖子

然后怎么确定哪个是呢?
C:\Test>netsh interface show interface

Admin State    State          Type             Interface Name
-------------------------------------------------------------------------
Enabled                       Dedicated        Wireless Network Connection
Enabled                       Dedicated        Local Area Connection
Enabled                       Dedicated        VMware Network Adapter VMnet1
Enabled                       Dedicated        VMware Network Adapter VMnet8
Enabled                       Dedicated        1394 Connection
Enabled                       Internal         Internal
Enabled                       Loopback         Loopback

作者: lxzzr    时间: 2009-10-6 12:42     标题: 回复 13楼 的帖子

嘿嘿,你在顶楼不是说了吗:英文系统,默认是"Local Area Connection";^_^
作者: Batcher    时间: 2009-10-6 15:06     标题: 回复 14楼 的帖子

关键是后面那句“此外,用户还可能自己修改了本地连接的名称。”
作者: lxzzr    时间: 2009-10-6 16:05     标题: 回复 15楼 的帖子

一样看得到吧,英文版的没试...
作者: terse    时间: 2009-10-6 16:52

10楼 ipconfig  这个好
不明白 怎么不在第一个FOR里显示  CALL 出来 我怎么感觉多余了
作者: hmlstfqtl    时间: 2010-5-19 11:33

我也来一段简单点的
  1. @echo off
  2. for /f "delims=:" %%I in ('ipconfig ^| find /i "Ethernet"') do set LAC=%%I
  3. set LAC=%LAC:~17%
  4. echo %LAC%
  5. pause
复制代码

[ 本帖最后由 hmlstfqtl 于 2010-5-19 12:06 编辑 ]
作者: caruko    时间: 2010-5-19 13:50

systeminfo |findstr "连接名"
不是英文版,也不清楚find什么关键字
作者: kstg4782964    时间: 2011-4-22 09:28

本帖最后由 kstg4782964 于 2011-4-22 09:49 编辑

大家好!
末学是新人……从事国际化测试工作,自己在研究在不同语言平台下获取“本地连接”。
经测试发现:楼主大侠和14楼的高手的代码不能在WIN 7平台下通过。
14楼高手的代码可以应用于英,日,德,韩,俄,繁中语言的2008 server 平台下。

但在西班牙语中,代码“set LAC=%LAC:~17%”应该为“set LAC=%LAC:~22%”,这样也能够正常使用

问题出在法语上,当我IPCONFIG时,发现它的“本地连接”名和最后的“:”之间有一个空格!!
如果将这样获取过来的名字用于其它地方,因为本身多了一个空格,与原名不符,所以出错。

但在“NCPA.cpl”中查看该连接名时,发现空格是不存在的。

就因为法语中的这个空格,该批处理就不能用于法语环境,纠结!

通过测试的语言和环境平台有:
      WIN XP     WIN 7    WIN 2003     WIN 2008
EN        √
DE        √            √
JA   √         √
SC             ×
TC   √
KO        √             √
RU        √
ES                      √
FR                      ×

附图:
1.英文

2.法语


感谢楼主大侠的帖子,让我能够得以在此找到问题的解决方法。

等待高人赐予解决方法!(图片需要登录百度才可见,相信大家都有百度帐号吧:))
作者: kstg4782964    时间: 2011-4-26 14:57

问题已解决,代码如下:

@echo off
for /f "delims=:" %%I in ('ipconfig ^| find /i "Ethernet"') do set LAC=%%I
set LAC=%LAC:~15%
echo "%LAC:~0,-1%"
REM 然后我就给它来一条加DNS的命令
netsh interface ip set dns "%LAC:~0,-1%" static 192.168.0.1
pause

非常感谢本帖的各位高手给予的启发,让末学能够尝试使用批处理脚本解决工作中的问题。

注意:本楼代码仅适用于法语环境,简中环境的楼主的代码或14楼的就可以。
作者: jbcdidgosir    时间: 2013-3-4 13:29

回复 1# Batcher

这是我的MyNet.reg文件,里面没有Local Area Connection 2,请管理员指点,谢谢!

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\11]
"ServiceName"="{62F14956-B754-4691-BFE2-0B42924D0D80}"
"Description"="Intel(R) Wireless WiFi Link 4965AG"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\9]
"ServiceName"="{87C0AE26-3795-4B1B-9205-D12DCE46790E}"
"Description"="Intel(R) 82566MM Gigabit Network Connection"
作者: jbcdidgosir    时间: 2013-3-4 13:33

本帖最后由 jbcdidgosir 于 2013-3-4 14:13 编辑
我也来一段简单点的

[ 本帖最后由 hmlstfqtl 于 2010-5-19 12:06 编辑 ]
hmlstfqtl 发表于 2010-5-19 11:33



    用你的程序我查到了Local Area Connection 2,但是Local Area Connection和Wireless Network Connection查不到,请问怎么才能做到全查到,并且挑选出来?我要挑选网关为192.168.1.1的网卡的名字.谢谢!
作者: gobi918    时间: 2014-5-8 15:09

本帖最后由 gobi918 于 2014-5-8 15:22 编辑

我也来一个来个XP/WIN7/简繁体通吃的连线名称获取代码:
  1. rem 以上内容略   
  2. for /f tokens^=1^,2^ delims^=^" %%j in ('netsh interface ip show config') do (        
  3.        if "%%j"=="介面 " (  
  4.        echo 连线名称为:%%k      
  5.     )  
  6.        if "%%j"=="接口 " (  
  7.        echo 连线名称为:%%k   
  8.      )   
  9. )  
  10. pause
复制代码
Ps:繁体系统中显示为介面,简体则为接口,不过win7好像会有一个Loopback Pseudo-Interface的回环网卡,所以代码实际使用可能需要加入排除判断,比如下面使用中,我仅设置第一块网卡,然后跳出for循环。

还是之前在博客写的,其中%%k则为连线名称,原文地址:http://zhangge.net/497.html

后面还写了一个GHOST系统自动恢复系统安装之前的IP设置的脚本,下面是截取一部分代码,结合了上面获取连线名称的代码,供参考:
  1. .....以上略....
  2. rem 獲取第一塊網卡的名稱,并設置IP,多塊網卡將仅設置第一塊   
  3. for /f tokens^=1^,2^ delims^=^" %%j in ('netsh interface ip show config') do (         
  4.             
  5.                 if "%%j"=="介面 " (  
  6.                   netsh interface ip set address name="%%k" source=static addr=!addr! mask=!mask! gateway=!gateway!      
  7.                   call :end                       
  8.                         
  9.                        )   
  10.                 if "%%j"=="接口 " (   
  11.                     netsh interface ip set address name="%%k" source=static addr=!addr! mask=!mask! gateway=!gateway!      
  12.                     call :end                     
  13.             )           
  14.         )      
  15. :end   
  16. echo 設置完畢,3S后自動退出!   
  17. ping -n 3 127.1 >nul   
  18. exit   
  19. ...以下略....
复制代码
有兴趣的可以到原文看看:http://zhangge.net/1885.html




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