Board logo

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

作者: friendtasy    时间: 2009-11-26 15:05     标题: [已解决]获取mac地址的批处理如何兼容多网卡的情况?

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


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

[ 本帖最后由 friendtasy 于 2009-11-28 00:21 编辑 ]
作者: lxzzr    时间: 2009-11-26 16:50     标题: 回复 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 编辑 ]
作者: friendtasy    时间: 2009-11-26 20:23     标题: 回复 2楼 的帖子

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

两个网卡的时候出现这样的情况
[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 编辑 ]
作者: lxzzr    时间: 2009-11-27 10:15     标题: 回复 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
复制代码

作者: zqz0012005    时间: 2009-11-27 13:50

获取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
复制代码

作者: friendtasy    时间: 2009-11-27 14:17     标题: 回复 6楼 的帖子

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

[ 本帖最后由 friendtasy 于 2009-11-27 14:46 编辑 ]
作者: Batcher    时间: 2009-11-27 16:40     标题: 回复 7楼 的帖子

参考:

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

批处理set命令截取字符详解
http://bbs.bathome.net/thread-996-1-1.html




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