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

[网络连接] 批处理怎样查看当前正在用来上网网卡的网络连接的名称?

目的:
1.实现自动判断当前使用网卡。(这里的正在使用是指我用来上网的那张 =  =#,比如我机器插了N张网卡和N张虚拟网卡,我怎么找出我用来上网的那张?)
2.主要是通过提取当前使用并,用来上网的那张网卡的名称来禁用,或启用。用来上网的那张网卡。
3.当然要是有能批处理修改当前网卡名称的命令,请大侠不吝赐教!
4.总之就是要批处理得到当前正在使用 并 用来上网的那张网卡 的的名称。
5.当然用其他方式非批处理也可以,大侠只需要留下连接!
尝试:
1.用此代码得到的结果!如果是一张连接网卡没有问题。但是连接多张或者有虚拟网卡时候。此代码无效!!(除非碰巧IPCONFIG输出的最后一项是你正在使用的网卡,我们排除这种情况!)
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=2*" %%i in ('ipconfig ^|find "Ethernet adapter"') do (
  4. set j=%%j
  5. set j=!j:~,-2!
  6. )
  7. echo 你所使用的网络连接名称为:%j%
  8. pause
复制代码

2.曾思考过用devcon.exe达到目的,但是同样存在不知道那张网卡正在使用的烦恼!把本机所有连接网卡都禁用?不是很方便吧!

[ 本帖最后由 rivch 于 2011-1-5 23:37 编辑 ]

假设内网网卡的ID是VEN_13F0,外网网卡的ID是VEN_10EC。

  1. (1)切换到内网(LocalLan.bat)
  2. devcon.exe disable = net PCI\VEN_10EC
  3. devcon.exe enable = net PCI\VEN_13F0
  4. (2)切换到外网(Internet.bat)
  5. devcon.exe disable = net PCI\VEN_13F0
  6. devcon.exe enable = net PCI\VEN_10EC
复制代码


PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10\4&3A321F38&0&20F0
PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10\4&3A321F38&0&50F0
区别之处是末尾的20F0和50F0,因此使用通配符来标识,@*20F0和@*50F0;然后采用vbs执行命令就大功告成了。
  1.    strNICName = " disable @*50F0"
  2.    Set objShell = CreateObject("Wscript.Shell")
  3.    strCommand = "D:\devcon\devcon.exe"& strNICName
  4.    objShell.Run strCommand, 0, False  
  5.    strNICName = " enable @*20F0"
  6.    Set objShell = CreateObject("Wscript.Shell")
  7.    strCommand = "D:\devcon\devcon.exe"& strNICName
  8.    objShell.Run strCommand, 0, False
复制代码
测试环境:WINDOWS 8 64Bit
如系统环境不同,请自行修改 :)

TOP

1,使用 Getmac ,通过传输名称来判断
2,使用 ipconfig ,通过media state 来判断
3,使用 wmic 查询
  1. @echo off
  2. for /f "tokens=1-3* delims=," %%a in ('Getmac /v /nh /fo csv') do if not "%%d"==""媒体被断开"" (
  3.     echo 正在使用中......
  4.     echo 名称:%%a
  5.     echo 网卡:%%b
  6.     echo MAC地址:%%c
  7.     echo 协议:%%d
  8. )
  9. pause
复制代码
示例:
  1. wmic nic where(NetConnectionStatus=2) get NetConnectionID
复制代码
2,活动的网卡
7,被拔线网卡
0,被禁用网卡
修改本地连接名称、启用、禁用:
netsh interface set interface [name = ] IfName [ [admin = ] ENABLED|DISABLED [connect = ] CONNECTED|DISCONNECTED [newname = ] NewName ]
设置接口参数。
IfName  - 接口名称
admin   - 接口是否被启用 (仅用于非 LAN)。
connect - 是否连接接口 (仅用于非 LAN)。
newname - 接口的新名称 (仅用于非 LAN)。
注意:
- 除名称外,还必须至少指定一个选项。
- 如果 connect = CONNECTED 被指定,那么接口被自动启用,甚至在 admin = DISABLED 选项被指定时也是如此。

[ 本帖最后由 hanyeguxing 于 2011-1-6 09:34 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回复 2楼 的帖子

大侠,你的方法不给力 = =#
每张不同的网卡对应的ID也不同。所以你的方法不能实现通用。。。。
问题是关键是,我如何通过命令得到我当前插了网线的并且我正在通过他上网的网卡,名称,或者是ID。。。无法实现自动判断,我觉得意义不大。。。

TOP

回复 3楼 的帖子

寒夜孤星,谢谢你,你的GETMAC很给力。
虽然也没有自动判断连接并使用网卡!但是这命令很给力!
看了你的代码,很给力,但是貌似要做成选择性的批处理了。。。
看来也只能这样了,标题我已近改了!各位老大在看看能否实现一步到位 = =#

[ 本帖最后由 rivch 于 2011-1-5 23:40 编辑 ]

TOP

再给楼主举个例子:将当前正在使用的网卡改名为“新名”
  1. @echo off
  2. for /f "tokens=1* delims==" %%a in ('Wmic nic get NetConnectionID^,NetConnectionStatus/value') do call:a "%%a" "%%b"
  3. exit
  4. :a
  5. if /i %1=="NetConnectionID" set a=%2
  6. if /i %1=="NetConnectionStatus" if %2=="2" netsh interface set interface name=%a% newname="新名"
复制代码

[ 本帖最后由 hanyeguxing 于 2011-1-6 10:20 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

还有个办法,通过route print 找出默认网关,然后再IPCONFIG 或者 SYSTEMINFO 来对照查出是那个网卡在上网..

TOP

测试环境:WINDOWS 8 64Bit
如系统环境不同,请自行修改 :)

TOP

回复 6楼 的帖子

谢谢版主!!!
果然版主就是不一样。。。WMIC就是牛B!
我先测试一下,要是OK的话我就结贴了!!!O(∩_∩)O哈哈~

0 0 版主的代码在我本机上就失败了。。。我本机是3张物理网卡,都连接了网线的。。。。两张虚拟网卡,用的VMware虚拟机!
测试了楼主的代码后改的是没有在使用的那张网卡的名字 - -#
我本机是2003的系统,是否和这个有关系?
当然我在XPSP3上也测试过了。可以的。但是那机子就一张网卡。所以明天再用找机子试试。。期待XPSP3下的完美运行!
今天还没时间去试验,版主的代码,要半夜的时候试验。。。所以自己就先改选择方式的先用着 0,0.等晚上试验好了。在上来和大家分享版主的代码!

我自己改的,选择的方式 = =#
将就吧,能力有限啊。。。WIMC不是很熟。。学习中~~~
  1. @echo off&setlocal enableDelayedExpansion
  2. Title 网克自动批处理 BY RIVCH
  3. MODE CON COLS=30 LINES=10
  4. set hi=
  5. set en=
  6. set ch=
  7. set wk=
  8. cls&color f5
  9. for /f "tokens=1-2 delims=," %%a in ('Getmac /v /nh /fo csv') do (
  10. set hi=%%a
  11. set en=%%b && call :nobad
  12. )
  13. exit
  14. :nobad
  15. echo.----------------------------
  16. echo 网卡名称:%hi%
  17. echo.
  18. echo 网卡ID:%en%
  19. echo.----------------------------
  20. :back
  21. echo.
  22. echo 1:修改  2:查看其他网卡
  23. echo.
  24. set /p ch= 你的选择是:
  25. if "%ch%"=="1" goto wego1
  26. if "%ch%"=="2" goto :eof
  27. goto back
  28. cls&color f2
  29. :wego1
  30. echo.
  31. echo.
  32. echo ---------------------------
  33. echo.
  34. echo.请稍等,正在设置网卡参数
  35. echo.
  36. echo ---------------------------
  37. set wk=%hi%
  38. netsh interface ip set address name="%wk%" source=static addr=10.1.1.1 mask=255.0.0.0 gateway=NONE >nul 2>nul
  39. netsh interface ip set dns name="%wk%" dhcp >nul 2>nul
  40. netsh interface set interface name="%wk%" admin=DISABLED >nul 2>nul
  41. cls&color f2
  42. echo.
  43. echo.█████████████████████
  44. echo   网卡已经设置为网克模式
  45. echo █████████████████████
  46. echo 更改成功,可以开始网克!& pause>nul
  47. cls
  48. echo.
  49. echo.
  50. echo ---------------------------
  51. echo.
  52. echo 请稍等,正在重新启用网卡
  53. echo.
  54. echo ---------------------------
  55. netsh interface set interface name="%wk%" admin=ENABLED >nul 2>nul
  56. exit
复制代码

[ 本帖最后由 rivch 于 2011-1-7 18:07 编辑 ]

TOP

有多个网卡要知道是那个在起作用,可以通过路由来判断..
但如果你的网卡都在同一网段,使用同样的网关,那下面的判断不出来了

注意,所有FORgen CALL都是在同一行
  1. @echo off
  2. for /f "tokens=3,4" %%a in ('route print ^|findstr "\<0.0.0.0\>"')  do for /f "tokens=2 delims={}-" %%c in ('wmic nicconfig get DefaultIPGateway^,IPAddress^,Description ^|findstr "%%a"^|findstr "%%b" ') do call :NETID %%c
  3. goto :eof
  4. :NETID
  5. wmic nic where "NAME='%*'" get NetConnectionID /value
复制代码

[ 本帖最后由 caruko 于 2011-1-7 22:01 编辑 ]

TOP

回复 10楼 的帖子

大侠你的方法不错,能判断出来,但是正如你刚才所说。。。同样的网关是判断不出来的。。。。
版主的方法,就差一点了。如果一个是摄像头虚拟的网卡,那么代码就出错了。改的应该也是最后一个赋值的,同理如果两张网卡那改的可能一时最后赋值的那个。。。。。。。正在测试中,。。。。

TOP

建议看下这篇文章,多网卡冗余时,只要有一个能上网就OK
http://www.huawei.com/ecommunity/bbs/10166223.html

TOP

回复 10# caruko


    mark,膜拜大神

TOP

返回列表