Board logo

标题: [文本处理] 批处理如何获取本机MAC地址并从指定文本中提取出该MAC地址所对应的IP地址赋值给变量 [打印本页]

作者: lywlhs    时间: 2008-12-5 12:56     标题: 批处理如何获取本机MAC地址并从指定文本中提取出该MAC地址所对应的IP地址赋值给变量

本帖最后由 pcl_test 于 2016-11-26 22:29 编辑

因为不会编程,所以描述的语言很混乱。通过版主的细心讲解,现在把问题重新描述一下。
我现在有一个mac.ini的文件,里面记录的是mac和IP的对应表。我现在想通过命令得到本机的MAC地址,然后用得到的MAC到mac.ini里找到和这个MAC对应的IP地址,并且赋值给变量。我就是要得到这个变量。我的mac.ini放在C盘根目录下。我只有一个网卡。
我的mac.ini文件内容和格式如下:
00:F0:3B:96:B8:5D=192.168.0.2
00:F0:3B:96:E1:F6=192.168.0.3
00:F0:3B:96:92:C7=192.168.0.4
..........
还请大家帮忙看一下。

[ 本帖最后由 lywlhs 于 2008-12-5 19:30 编辑 ]
作者: wxcute    时间: 2008-12-5 14:43

顶楼很难看清楚阿,请楼主检查修改好点哦
  1. @echo off
  2. set Mac=00-F0-4C-86-00-00
  3. for /f "tokens=2 delims==" %%b in ('"find /i "%Mac%" "c:\mac.ini""') do set IP=%%b
  4. if defined IP (echo %IP%) else echo 未记录此 MAC
  5. pause
复制代码

作者: lywlhs    时间: 2008-12-5 19:23

测试了一下。不知道为什么,上面的代码还是不能得到MAC对应的IP。

[ 本帖最后由 lywlhs 于 2008-12-5 19:27 编辑 ]
作者: batman    时间: 2008-12-5 19:47

仅适用于单网卡
  1. @echo off
  2. rem 获得本机MAC
  3. for /f "tokens=2 delims=:" %%i in ('ipconfig /all^|findstr /c:"Physical Address"') do set "mac=%%i"&goto next
  4. :next
  5. for /f "tokens=2 delims==" %%i in ('findstr "%mac:~1%" mac.ini') do set "ip=%%i"
  6. echo %ip%&pause>nul
复制代码

作者: lywlhs    时间: 2008-12-5 19:56

C:\Documents and Settings\user\桌面>rem 获得本机MAC

C:\Documents and Settings\user\桌面>for /F "tokens=2 delims=:" %i in ('ipcon
fig /all|findstr /c:"Physical Address"') do set "mac=%i"  & goto next

"  & goto next d Settings\user\桌面>set "mac= 00-F0-3B:96-92-C7

C:\Documents and Settings\user\桌面>for /F "tokens=2 delims==" %i in ('finds
tr "00-F0-3B:96-92-C7" c:\Mac.ini') do set "ip=%i"

C:\Documents and Settings\user\桌面>echo   & pause1>nul
ECHO 处于打开状态

还是不行。
作者: Batcher    时间: 2008-12-5 20:03

代码保存为test.bat
双击运行test.bat
  1. @echo off
  2. for /f %%a in ('getmac^|findstr "^00-"') do (
  3.   set MAC=%%a
  4.   goto :look
  5. )
  6. :look
  7. set MAC=%MAC:-=:%
  8. for /f "tokens=2 delims==" %%a in ('findstr "%MAC%" C:\mac.ini') do (
  9.   set IP=%%A
  10. )
  11. if defined IP (
  12.   echo %IP%
  13. ) else (
  14.   echo mac.ini文件里面没有本机对应的IP
  15. )
  16. pause
复制代码

[ 本帖最后由 Batcher 于 2008-12-5 20:04 编辑 ]
作者: lywlhs    时间: 2008-12-5 20:22

C:\Documents and Settings\user\桌面>for /F %a in ('getmac|findstr "^00-"') d
o (
set MAC=%a
goto :look
)

C:\Documents and Settings\user\桌面>(
set MAC=00-F0-3B:96-92-C7
goto :look
)

C:\Documents and Settings\user\桌面>set MAC=00-F0-3B:96-92-C7

C:\Documents and Settings\user\桌面>for /F "tokens=2 delims==" %a in ('finds
tr "00-F0-3B:96-92-C7" C:\mac.ini') do (set IP=%A )

C:\Documents and Settings\user\桌面>(set IP=%A )

C:\Documents and Settings\user\桌面>if defined IP (echo %A )  else (echo mac
.ini文件里面没有本机对应的IP )
%A


晕了。还是不行。
作者: namejm    时间: 2008-12-5 20:28

  试试这个代码:
  1. @echo off
  2. for /f "tokens=2 delims=:" %%i in ('ipconfig /all^|findstr /ic:"Physical Address"') do set str=%%i
  3. set var=
  4. for /f "tokens=2 delims==" %%i in ('findstr "%str:-=:%" c:\mac.ini') do echo %%i
  5. if not defined var echo 没有找到对应的IP
  6. pause
复制代码
  若能正确显示IP,则将最后一句 echo %%i 改为 set var=%%i,就可以把变量值赋予变量var了。
作者: Batcher    时间: 2008-12-5 20:35

  1. getmac
复制代码
结果贴出来看看?
  1. ipconfig /all
复制代码
结果贴出来看看?
作者: lywlhs    时间: 2008-12-5 20:42

C:\Documents and Settings\user\桌面>for /F "tokens=2 delims=:" %i in ('ipcon
fig /all|findstr /ic:"Physical Address"') do set str=%i

:\Documents and Settings\user\桌面>set str= 00-F0-3B:96-92-C7

C:\Documents and Settings\user\桌面>set str=

C:\Documents and Settings\user\桌面>pause
请按任意键继续. . .


我在你的代码set str=  下又加了一个pause
执行完set str=后,CMD就自动关了。
还是不行。不显示IP。你们测试了吗?我是不是那里做的不对?

[ 本帖最后由 lywlhs 于 2008-12-5 20:44 编辑 ]
作者: Batcher    时间: 2008-12-5 20:46     标题: 回复 10楼 的帖子

你的本机MAC地址很奇怪,请回答9楼问题。
作者: lywlhs    时间: 2008-12-5 20:56

ipconfig /all

Windows IP Configuration

        Host Name . . . . . . . . . . . . : ly04
        Primary Dns Suffix  . . . . . . . :
        Node Type . . . . . . . . . . . . : Unknown
        IP Routing Enabled. . . . . . . . : No
        WINS Proxy Enabled. . . . . . . . : No

Ethernet adapter 本地连接:

        Connection-specific DNS Suffix  . :
        Description . . . . . . . . . . . : NVIDIA nForce Networking Controller
        Physical Address. . . . . . . . . : 00-F0-3B-96-92-C7
        Dhcp Enabled. . . . . . . . . . . : No
        IP Address. . . . . . . . . . . . : 192.168.0.4
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.0.1
        DNS Servers . . . . . . . . . . . : 202.100.96.68
                                            202.100.96.69
getmac

物理地址            传输名称
=================== ==========================================================
00-F0-3B:96-92-C7   \Device\Tcpip_{9E2AEE90-5B5C-440B-87DB-2DC55E24F3B8},
                    \Device\NwlnkIpx

[ 本帖最后由 lywlhs 于 2008-12-5 21:08 编辑 ]
作者: namejm    时间: 2008-12-5 21:04

  00-F0-3B:96-92-C7?居然有两种连接符?真是奇怪啊——以前只见过纯短横符号连接的格式,没想到还会有冒号存在呢。不过,我在8楼的代码应该能兼容这种情况,你测试过了吗?
作者: lywlhs    时间: 2008-12-5 21:23

我真是晕。把MAC.INI里的00:F0:3B:96:92:C7改成00-F0-3B-96-92-C7
for /f "tokens=12" %%a in ('ipconfig /all^|findstr /i /c:"Physical Address"') do set Mac=%%a
for /f "tokens=2 delims==" %%b in ('more ^<c:\Mac.ini^|find /i "%Mac%"') do set IP=%%b
这样可以正确得到IP地址了。
从ipconfig /all里得到的mac是00-F0-3B-96-92-C7形式的,我真笨,把mac.ini里的:改成-就什么都结了。
谢谢各位领导了。辛苦了。




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