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

[系统相关] [已解决]获取mac地址的批处理如何兼容多网卡的情况?

要求如下,先获取网卡mac地址,如果只有一个网卡,直接把mac地址付于变量(比如%MAC),如果存在多个网卡MAC,则列出,让用户选择(输入键盘选择,如按1、2、3之类),选择后把选择的MAC地址付值于变量。偶想不出如何判断这两个不同的条件。


看了一下参考,总算大致看明白了,不过5楼的怎么会用mac_这样的变量名呢?我还以为_有什么特殊用法呢。

[ 本帖最后由 friendtasy 于 2009-11-28 00:21 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

回复 1楼 的帖子

试试这个:

没有列出禁用的网卡

  1. @echo off&setlocal enabledelayedexpansion
  2. echo.&echo.
  3. for /f "skip=1 tokens=1,* delims= " %%a in ('wmic nic where ^(adaptertype like "ethernet ___._" and netconnectionstatus^="2"^) get name^,macaddress') do (set /A N+=1&set _!N!MAC=%%a&call echo.[!N!] %%b %%a)
  4. echo.&echo.
  5. IF !N! EQU 1 set MAC_=!_1MAC!&goto :loop
  6. set /p input=Please input:
  7. set MAC_=!_%input%MAC!
  8. :loop
  9. echo MAC:%MAC_%
  10. pause>nul
复制代码

[ 本帖最后由 lxzzr 于 2009-11-26 16:52 编辑 ]

TOP

回复 2楼 的帖子

嗯,不错,不过在只有一个网卡的时候,出现了空的“2”,两个网卡的时候,出现了空的“3”,话说回来,朋友用的不是传统的ipconfig /all来获取,连win7都可以获取哦,win7跟xp用ipconfig 的标识是不同的。朋友能不能完善一下,并解说一下命令的内容?

TOP

两个网卡的时候出现这样的情况
[1] Realtek RTL8139/810x Family Fast Ethernet NIC      00:0B:2F:04:38:96
[2] Realtek RTL8139/810x Family Fast Ethernet NIC #2   00:E0:4C:E6:A5E
[3]

顺便说一下,朋友用的获取mac指令在当网卡没连接网线时是无效的,而ipconfig /all在即使网卡没实际网线连接也可以获取

[ 本帖最后由 friendtasy 于 2009-11-26 23:20 编辑 ]

TOP

回复 4楼 的帖子

用ipconfig这样,效率不高:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|find /i "Description"') do (
  3.      set /a n+=1&set m=
  4.      for /f "tokens=2 delims=:" %%b in ('ipconfig /all^|find /i "Physical Address"') do (
  5.          set /a m+=1&set _!m!mac=%%b
  6.          if !n! == !m! call echo [!n!] %%b %%a
  7.      )
  8. )
  9. if !n! == 1 set mac_=!_1mac!&goto :loop
  10. set /p input=Please input:
  11. set mac_=!_%input%mac!
  12. :loop
  13. echo MAC:%mac_%
  14. pause
复制代码

TOP

获取mac列表可以简单点
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=*" %%a in ('ipconfig /all ^| findstr /i "Description Physical"') do (
  4.     set var=%%a
  5.     if /i "!var:~,11!"=="Description" (set /a n+=1)
  6.     set str=!var:*:=!
  7.     set "str=!str:~,-1!"    //去掉行末的回车符Cr,以免影响输出
  8.     for %%i in (!n!) do set _%%i=!_%%i!!str!& if /i not "!var:~,11!"=="Description" echo [!n!]!_%%i!
  9. )
  10. pause
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 6楼 的帖子

很精妙,对Set运算、加叹号变量及if对字符比较做为条件不是很懂,能否解说一下吗?字符截取已经不记得怎么使用了,呵呵,另5楼的代码没有考虑到如果机子存在ppoe宽带连接的话也会出现Description的,但它没mac,因而出现了一个空值,个人认为以网卡名前的Ethernet adapter项作为关键词以空格作分隔符可能更适当些。

[ 本帖最后由 friendtasy 于 2009-11-27 14:46 编辑 ]

TOP

回复 7楼 的帖子

参考:

批处理中的变量延迟扩展、变量嵌套
http://bbs.bathome.net/thread-2899-1-1.html

批处理set命令截取字符详解
http://bbs.bathome.net/thread-996-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表