标题: [网络连接] 求助批处理findstr获取电脑MAC和IP地址 [打印本页]
作者: dmxiaoma 时间: 2017-2-15 12:07 标题: 求助批处理findstr获取电脑MAC和IP地址
本人是批处理小白一个,有计算机基础,看到别人做的批处理工具很方便,也想通过做批处理工具来完成一些工作。
目标:想做一个批处理运行后显示电脑的MAC地址和IP地址
具体需求:全是win7和xp的电脑,有些有多网卡,现在需要通过ipconfig/all命令,通过找到网卡名来获取电脑的MAC和IP地址,最后显示的内容就是电脑的MAC和IP地址。
另:绝大部分电脑还是能通过找“本地连接”来获取到正确的IP和MAC地址,有多个本地连接的不知道怎么办,正常情况下是所有电脑IP都是以固定数字16开头的,如16.*.*.*,如果能通过找到23开关的IP所在的网卡的MAC地址是最准确的办法,但不知道能不能通过批处理实现。
通过搜索找到了这个帖子:http://bbs.bathome.net/thread-32288-1-1.html,里面的代码已经实现了一半的功能了!
上网找了些资料学习后,尝试自己改代码,但总是不成功,快崩溃了!
我根据这个帖子http://www.bathome.net/viewthread.php?tid=9037里面提供的方法,改了下代码如下:- set "AdapterNamea=以太网适配器 本地连接"
- set "AdapterNameb=Ethernet adapter 本地连接"
- set "FileTmp=%temp%\ipList.txt"
- ipconfig /all >"%FileTmp%"
- for /f "delims=:" %%i in ('findstr /n /c:"%AdapterNamea%" /c:"%AdapterNameb%" "%FileTmp%"') do (
- set "SkipRow=%%i"
- goto :DoSkip
- )
复制代码
就上面这一段,我想同时加入xp和win7的查找,就是搜索AdapterNamea 或 AdapterNameb,但一加这段代码就失效了。
后面的我想加入获取MAC的代码也是各种问题。
求大神帮忙改下,能实现我所说的目标就行,感激不尽!
收集到的一些信息:
XP网卡名:Ethernet adapter 本地连接
WIN7网卡名:以太网适配器 本地连接
xpIP:IP Address
xpMAC:Physical Address
Win7IP:IPv4 地址
Win7MAC:物理地址
作者: dmxiaoma 时间: 2017-2-15 12:09
本帖最后由 dmxiaoma 于 2017-2-15 14:39 编辑
先上传一份一台电脑的ipconfig内容:
Windows IP 配置
主机名 . . . . . . . . . . . . . : USER-20151029TF
主 DNS 后缀 . . . . . . . . . . . :
节点类型 . . . . . . . . . . . . : 混合
IP 路由已启用 . . . . . . . . . . : 否
WINS 代理已启用 . . . . . . . . . : 否
以太网适配器 本地连接:
连接特定的 DNS 后缀 . . . . . . . :
描述. . . . . . . . . . . . . . . : Intel(R) Ethernet Connection I217-LM
物理地址. . . . . . . . . . . . . : 44-39-C4-52-63-42
DHCP 已启用 . . . . . . . . . . . : 是
自动配置已启用. . . . . . . . . . : 是
本地链接 IPv6 地址. . . . . . . . : fe80::e896:88ef:3c9f:8152%12(首选)
IPv4 地址 . . . . . . . . . . . . : 16.230.1.109(首选)
子网掩码 . . . . . . . . . . . . : 255.255.255.0
获得租约的时间 . . . . . . . . . : 2017年1月17日 11:09:37
租约过期的时间 . . . . . . . . . : 2017年2月15日 13:09:44
默认网关. . . . . . . . . . . . . : 16.230.1.254
DHCP 服务器 . . . . . . . . . . . : 16.230.1.253
DHCPv6 IAID . . . . . . . . . . . : 256129476
DHCPv6 客户端 DUID . . . . . . . : 00-01-00-01-1D-C3-E5-5D-44-39-C4-52-68-47
DNS 服务器 . . . . . . . . . . . : 16.226.1.253
TCPIP 上的 NetBIOS . . . . . . . : 已启用
以太网适配器 VMware Network Adapter VMnet1:
连接特定的 DNS 后缀 . . . . . . . :
描述. . . . . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet1
物理地址. . . . . . . . . . . . . : 00-50-56-C0-00-01
DHCP 已启用 . . . . . . . . . . . : 否
自动配置已启用. . . . . . . . . . : 是
本地链接 IPv6 地址. . . . . . . . : fe80::98b2:3bfb:f332:6a59%14(首选)
IPv4 地址 . . . . . . . . . . . . : 192.168.74.1(首选)
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :
DHCPv6 IAID . . . . . . . . . . . : 318787670
DHCPv6 客户端 DUID . . . . . . . : 00-01-00-01-1D-C3-E5-5D-44-39-C4-52-68-47
DNS 服务器 . . . . . . . . . . . : fec0:0:0:ffff::1%1
fec0:0:0:ffff::2%1
fec0:0:0:ffff::3%1
TCPIP 上的 NetBIOS . . . . . . . : 已启用
以太网适配器 VMware Network Adapter VMnet8:
连接特定的 DNS 后缀 . . . . . . . :
描述. . . . . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet8
物理地址. . . . . . . . . . . . . : 00-50-56-C0-00-08
DHCP 已启用 . . . . . . . . . . . : 否
自动配置已启用. . . . . . . . . . : 是
本地链接 IPv6 地址. . . . . . . . : fe80::8cf8:dc17:86f2:c573%16(首选)
IPv4 地址 . . . . . . . . . . . . : 192.168.164.1(首选)
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . :
DHCPv6 IAID . . . . . . . . . . . : 352342102
DHCPv6 客户端 DUID . . . . . . . : 00-01-00-01-1D-C3-E5-5D-44-39-C4-52-68-47
DNS 服务器 . . . . . . . . . . . : fec0:0:0:ffff::1%1
fec0:0:0:ffff::2%1
fec0:0:0:ffff::3%1
TCPIP 上的 NetBIOS . . . . . . . : 已启用
隧道适配器 isatap.{AB0E13BB-890A-4BBB-B331-848F69BC2DBE}:
媒体状态 . . . . . . . . . . . . : 媒体已断开
连接特定的 DNS 后缀 . . . . . . . :
描述. . . . . . . . . . . . . . . : Microsoft ISATAP Adapter
物理地址. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
DHCP 已启用 . . . . . . . . . . . : 否
自动配置已启用. . . . . . . . . . : 是
隧道适配器 isatap.{CE4D1FDD-45F4-429C-8CAE-FAC202B769F4}:
媒体状态 . . . . . . . . . . . . : 媒体已断开
连接特定的 DNS 后缀 . . . . . . . :
描述. . . . . . . . . . . . . . . : Microsoft ISATAP Adapter #2
物理地址. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
DHCP 已启用 . . . . . . . . . . . : 否
自动配置已启用. . . . . . . . . . : 是
隧道适配器 本地连接* 6:
连接特定的 DNS 后缀 . . . . . . . :
描述. . . . . . . . . . . . . . . : Microsoft Teredo Tunneling Adapter
物理地址. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
DHCP 已启用 . . . . . . . . . . . : 否
自动配置已启用. . . . . . . . . . : 是
IPv6 地址 . . . . . . . . . . . . : 2001:0:7ce8:845e:148b:d5a:3f57:fe92(首选)
本地链接 IPv6 地址. . . . . . . . : fe80::148b:d5a:3f57:fe92%11(首选)
默认网关. . . . . . . . . . . . . : ::
TCPIP 上的 NetBIOS . . . . . . . : 已禁用
隧道适配器 isatap.{880ACCC2-B788-4C8A-87BD-7CEDEA92E02B}:
媒体状态 . . . . . . . . . . . . : 媒体已断开
连接特定的 DNS 后缀 . . . . . . . :
描述. . . . . . . . . . . . . . . : Microsoft ISATAP Adapter #3
物理地址. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0
DHCP 已启用 . . . . . . . . . . . : 否
自动配置已启用. . . . . . . . . . : 是
作者: taofan712 时间: 2017-2-15 13:06
你把你想要获取的字符串用红色标注一下?
作者: dmxiaoma 时间: 2017-2-15 14:40
我标红了下了,麻烦看下,这是台win7的电脑,还有xp系统的电脑,关键字我1楼有标红的。
作者: taofan712 时间: 2017-2-15 15:24
本帖最后由 taofan712 于 2017-2-15 15:39 编辑
- @echo off
- for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|find "Physical Address"') do ( set mac=%%a )
- for /f "tokens=2 delims=:" %%b in ('ipconfig /all^|find "IP Address"') do ( set ip=%%b )
- echo; %mac% %ip% &pause>nul
复制代码
作者: dmxiaoma 时间: 2017-2-16 09:17
本帖最后由 dmxiaoma 于 2017-2-16 09:32 编辑
回复 5# taofan712
这个只能获取到xp系统电脑的IP和MAC地址,如果是win7就获取不到了啊,我就是想一个批理,不管是xp还是win7系统都能获取到!
就是我上面说的目标:做一个批处理,在任意电脑(全是xp或win7系统)上运行都能正确显示出该电脑的IP和MAC地址!
作者: taofan712 时间: 2017-2-16 09:49
本帖最后由 taofan712 于 2017-2-16 09:54 编辑
回复 6# dmxiaoma
加一个判断,if /i %WinOS%==XP
if %WinOS%==7
%winos%可以用ver命令得出。
不同的系统find不同的关键字就是了啊。
作者: taofan712 时间: 2017-2-16 10:06
回复 6# dmxiaoma
还可以这样获取winos
wmic os get caption|find /i "xp" && set "WinOs=xp"|| set "WinOs=7"
作者: dmxiaoma 时间: 2017-2-16 10:29
回复 8# taofan712
哦,就是不同系统goto一下是吧?
我一楼里这段代码为什么不能达到逻辑或的功能呢?就是实现搜索xp或win7下的关键字这样的功能。
for /f "delims=:" %%i in ('findstr /n /c:"%AdapterNamea%" /c:"%AdapterNameb%" "%FileTmp%"')
作者: taofan712 时间: 2017-2-16 10:39
本帖最后由 taofan712 于 2017-2-16 11:33 编辑
回复 9# dmxiaoma
我刚开始学批处理,不是很懂,我之前的印象是(可能是错误的):findstr 查找内容 “A B” 就是查找A或者B,加参数 /c "A B",就是查找“A B”,不确定有“/C /C”这种用法。
所以如果被查找的对象本身有空格,好像很复杂,建议用if判断。
作者: dmxiaoma 时间: 2017-2-16 15:29
回复 10# taofan712
那下面这段代码中的找ipv6和找IP是逻辑或还是顺序执行?能解释下标红的这段代码的意思吗?
for /f "tokens=2 delims=" %%i in ('more +%SkipRow% "%FileTmp%" ^| findstr /v "IPv6" ^|findstr "IP"')
作者: GNU 时间: 2017-2-16 15:31
回复 11# dmxiaoma
顺序执行。查找不包含 IPv6 而且包含 IP 的行。
作者: dmxiaoma 时间: 2017-2-16 16:05
回复 12# GNU
感谢!
如果我想直接搜索ipconfig /all中含有192.168.1.*这样的IP地址,代码应该怎么写?
电脑中有多个虚拟网卡IP如:192.168.164.3,192.168.74.5
我用findstr "192.168.1."或"192.168.1.*" 搜索出来的结果却是192.168.164.3这样错误的结果。
正确的表达式应该是怎样的?
作者: dmxiaoma 时间: 2017-2-16 17:33
求大神们帮写段代码:
运行wmic nicconfig get IPAddress,MACAddress |findstr "192.168.1.109"
得到结果
{"192.168.1.109", "fe80::e896:88ef:3c9f:8152"} 44:39:C4:52:68:47
现在怎么通过批处理命令把44:39:C4:52:68:47提取出来?
我写的代码不知道为什么不行:
@echo off
for /f "tokens=1,2 delims= " %%a in ('wmic nicconfig get IPAddress,MACAddress ^|findstr "192.168.1.109"') do (set "MAC=%%b")
echo, MAC地址^: %MAC%
pause
作者: B魔方大人 时间: 2017-2-16 17:43
求大神们帮写段代码:
运行wmic nicconfig get IPAddress,MACAddress |findstr "192.168.1.109"
得到结果 ...
dmxiaoma 发表于 2017-2-16 17:33
wmic nicconfig get IPAddress^,MACAddress 逗号加个转义试试
作者: dmxiaoma 时间: 2017-2-17 08:21
回复 15# B魔方大人
感谢啊!加上这个就好了!太感谢了!
作者: ygqiang 时间: 2017-2-17 14:37
回复 16# dmxiaoma
最终解决了吗?代码是?
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |