标题: [系统相关] [已解决]获取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楼 的帖子
试试这个:
没有列出禁用的网卡
-
- @echo off&setlocal enabledelayedexpansion
- echo.&echo.
- 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)
- echo.&echo.
- IF !N! EQU 1 set MAC_=!_1MAC!&goto :loop
- set /p input=Please input:
- set MAC_=!_%input%MAC!
- :loop
- echo MAC:%MAC_%
- 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这样,效率不高:
-
- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|find /i "Description"') do (
- set /a n+=1&set m=
- for /f "tokens=2 delims=:" %%b in ('ipconfig /all^|find /i "Physical Address"') do (
- set /a m+=1&set _!m!mac=%%b
- if !n! == !m! call echo [!n!] %%b %%a
- )
- )
- if !n! == 1 set mac_=!_1mac!&goto :loop
- set /p input=Please input:
- set mac_=!_%input%mac!
- :loop
- echo MAC:%mac_%
- pause
复制代码
作者: zqz0012005 时间: 2009-11-27 13:50
获取mac列表可以简单点- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=*" %%a in ('ipconfig /all ^| findstr /i "Description Physical"') do (
- set var=%%a
- if /i "!var:~,11!"=="Description" (set /a n+=1)
- set str=!var:*:=!
- set "str=!str:~,-1!" //去掉行末的回车符Cr,以免影响输出
- for %%i in (!n!) do set _%%i=!_%%i!!str!& if /i not "!var:~,11!"=="Description" echo [!n!]!_%%i!
- )
- 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 |