Board logo

标题: [文本处理] 如何用findstr从ipconfig /all结果中定位到指定的网卡/适配器/网络连接提取ip地址 [打印本页]

作者: dmxiaoma    时间: 2017-6-27 19:15     标题: 如何用findstr从ipconfig /all结果中定位到指定的网卡/适配器/网络连接提取ip地址

findstr的使用方法,求助
电脑ipconfig /all的结果

根据这个帖子:http://bbs.bathome.net/viewthread.php?tid=32287&highlight=MAC
为了xp和win7系统都能获取到IP和MAC地址,修改的代码:
@echo off
set "wkmza=Ethernet adapter 本地连接"
set "wkmzb=以太网适配器 本地连接"
set "FileTmp=%temp%\ipList.txt"
ipconfig /all >"%FileTmp%"
for /f "delims=:" %%i in ('findstr /n "%wkmza% %wkmzb%" "%FileTmp%"') do (
    set "SkipRow=%%i"
    goto oSkip
)

:DoSkip
for /f "tokens=2 delims=:" %%i in ('more +%SkipRow% "%FileTmp%" ^| findstr /i /r "IPv4.地址 IP.Address"') do (set "IP=%%i")
for /f "tokens=2 delims=:" %%i in ('more +%SkipRow% "%FileTmp%" ^| findstr "..-..-..-..-..-.."') do (
    set "MAC=%%i"
    goto :ShowResult
)

:ShowResult
set "MAC=%MAC: =%"
set "IP=%IP: =%"
echo,IP地址:%IP首选)=%
echo,MAC地址:%MAC:-=%
pause


获取结果:
IP地址:192.168.164.1
MAC地址:4439C4526847

正确的结果IP地址应该是192.168.0.16
标红的代码改成for /f "delims=:" %%i in ('findstr /n /c:"%wkmzb%" "%FileTmp%"') do (
也是一样的结果
这是为什么会得出这样错误的结果?
作者: hlzj88    时间: 2017-6-27 20:02

你的几块网卡都有地址,他们前面的标志都是一样的,物理地址和 IPv4 地址 ,电脑不是你肚里的虫,不知道你的心思的,它只会在你给定的条件里发现相关数据,因为用了for,会对数据一直分析到最后。所以,不是你想要的结果。
作者: dmxiaoma    时间: 2017-6-27 20:35

回复 2# hlzj88

谢谢帮助,为什么那个MAC地址就是对的呢?
作者: dmxiaoma    时间: 2017-6-28 17:43

本帖最后由 dmxiaoma 于 2017-6-28 17:45 编辑

回复 2# hlzj88

我按你提示改了下代码,现在可以用了。
再请教个问题用findstr多条件查找时要怎么写代码?
比如条件1是tj1 条件2是tj2
我要找满足条件1 或条件2 的是下面这样写么?
findstr /i "%tj1% %tj2%" "a.txt"'
要同时满足条件1和条件2 呢,怎么写代码?

还有原代码中用了/c参数是因为条件是有空格的字符串是吧?我现在没用这参数会不会对结果有影响?
作者: ShowCode    时间: 2017-6-28 19:57

回复 4# dmxiaoma
  1. findstr /i "%tj1%" "a.txt" | findstr /i "%tj2%"
复制代码

作者: hlzj88    时间: 2017-6-28 19:59

我所知道的用法是
  1. findstr /i "tj1" a.txt|findstr /i "tj2">>3.txt
复制代码
如这样的例子。
在找到tj1时传递用来发现tj2,满足条件写入文本。即一句话里同时存在两个关键词。




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