Board logo

标题: [注册表类] [已解决]用批处理修改计算机的有线网卡MAC地址,注册表项目如何判断? [打印本页]

作者: ygqiang    时间: 2011-9-24 01:20     标题: [已解决]用批处理修改计算机的有线网卡MAC地址,注册表项目如何判断?

http://blog.csdn.net/crane35/article/details/5267912


开始――搜索中输入regedit,用管理员权限打开注册表编辑器,依次展开HKEY_LOCAL_MACHINESYSTEM -> CurrentControlSet -> Control -> Class,在该分支下搜索刚才复制的GUID,找到后看待该分支下面还有0000、0001、0002、……这样的几个分支,一个一个点开看看,当看到右面"DriverDesc"项的值和设备管理器里要修改的网卡名一致的时候(比如我的是"Intel(R) PRO/100 VE Network Connection")就找到地方了。先记住该路径,例如我找到的是HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002BE10318}/0004


由于修改网卡MAC地址时要直接操作注册表,但Windows不会实时监控注册表中该项的变化,因此必须先禁用、启用网卡一次,让Windows使用新的地址,下面是修改步骤:

修改网卡MAC地址:
  1. rem 先禁用网卡
  2. netsh interface set interface "本地连接" disable
  3. rem 使用reg add命令修改物理地址
  4. reg add HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002BE10318}/0004 /v NetworkAddress /d 要修改的值 /f
  5. rem 再启用网卡
  6. netsh interface set interface "本地连接" enable
复制代码
还原网卡MAC地址:
  1. netsh interface set interface "本地连接" disable
  2. rem 使用reg delete命令删除NetworkAdress项,也就还原的原MAC地址
  3. reg delete HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002BE10318}/0004 /v NetworkAddress /f
  4. netsh interface set interface "本地连接" enable
复制代码
试验证明,上述方法是可行的。

我是打算用批处理修改计算机的有线网卡MAC地址(一般只有1个有线网卡,无线网卡可能有也可能没有)

问题来了,如何用bat批处理命令,判断当前有线网卡mac地址的修改,是在注册表哪个路径下(有的电脑可能在004下,也有的可能在007下)?
作者: ygqiang    时间: 2011-9-24 01:35

这个的关键就是有线网卡的序号。

需要在4D36E972-E325-11CE-BFC1-08002BE10318键值下一个个的找
作者: ygqiang    时间: 2011-9-24 01:39

不同电脑的有线网卡mac地址,注册表里面对应的位置不同


批处理能否实现智能判断呢?
作者: lxzzr    时间: 2011-9-24 14:03

  1. @echo off
  2. pushd "%~dp0\"
  3. SetLocal EnableDelayedExpansion
  4. set Adapter="NVIDIA nForce Networking Controller"
  5. rem 你的网络设备名称
  6. set Fullkey="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class"
  7. echo.正在导出注册表文件...
  8. regedit.exe /e %temp%\clsid.reg %Fullkey%
  9. echo.正在分析注册表文件...
  10. for /f "delims=:" %%a in ('Type "%temp%\clsid.reg" ^| findstr /ni /c:%Adapter%') do (
  11. for /l %%i in (100,-1,1) do (
  12. set /a Line = %%a - %%i
  13. for /f "tokens=2 delims=:" %%b in ('Type "%temp%\clsid.reg" ^| findstr /n .* ^| findstr /b !Line!:') do (
  14.                 echo.%%b | findstr /i %Fullkey% >nul 2>nul
  15. if !errorlevel! == 0 set CLSID=%%b
  16. )
  17. )
  18. )
  19. ECHO.%CLSID:~1,-1%
  20. erase "%temp%\clsid.reg"
  21. echo.按任意键退出...
  22. pause >nul
复制代码

作者: ygqiang    时间: 2011-9-24 18:57

多谢版主。

但你的代码,如何配合1楼的那个bat文件使用?

给个提示啊,谢谢
作者: ygqiang    时间: 2011-9-24 19:07

直接运行4楼的批处理。

结果如下:
作者: lxzzr    时间: 2011-9-25 00:45

  1. rem 单网卡(Intel 21140-Based PCI Fast Ethernet Adapter (Generic))、XPSP3下测试通过
  2. @echo off
  3. pushd "%~dp0\"
  4. SetLocal EnableDelayedExpansion
  5. rem 下面两行请自行修改
  6. set NetConnectionID=本地连接
  7. set NetworkAddress=111122223333
  8. set Fullkey="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class"
  9. rem 获取“本地连接”的设备名称
  10. for /f "delims=" %%a in ('wmic nic where "netconnectionid='%NetConnectionID%'" get name /value') do call set %%a>nul 2>nul
  11. regedit.exe /e %temp%\clsid.reg %Fullkey%
  12. rem 分析注册表
  13. echo.正在分析注册表文件...
  14. for /f "delims=:" %%a in ('Type "%temp%\clsid.reg" ^| findstr /ni /c:"%name%"') do (
  15. for /l %%i in (100,-1,1) do (
  16. set /a Line = %%a - %%i
  17. for /f "tokens=2 delims=:" %%b in ('Type "%temp%\clsid.reg" ^| findstr /n .* ^| findstr /b !Line!:') do (
  18.             echo.%%b | findstr /i %Fullkey% >nul 2>nul
  19. if !errorlevel! == 0 set CLSID=%%b
  20. )
  21. )
  22. )
  23. rem 使用reg add命令修改物理地址
  24. reg add "%CLSID:~1,-1%" /v NetworkAddress /d %NetworkAddress% /f
  25. rem 禁用网卡
  26. netsh interface set interface "本地连接" disable
  27. rem 启用网卡
  28. netsh interface set interface "本地连接" enable
  29. erase "%temp%\clsid.reg"
  30. echo.按任意键退出...
  31. pause >nul
复制代码
不过,我不敢保证 netsh 能启用、禁用网卡...
作者: ygqiang    时间: 2011-9-25 13:29

多谢。

rem 禁用网卡
netsh interface set interface "本地连接" disable

rem 启用网卡
netsh interface set interface "本地连接" enable

这2个操作,好像没有效果(用ipconfig/all,并没有显示修改成功)。

我手动在设备管理器里面,先禁用、再启用有线网卡,mac地址用ipconfig/all,才显示修改成功。

有没有别的批处理方法,让有线网卡的mac地址显示修改后的?
作者: Batcher    时间: 2011-9-25 13:48

回复 8# ygqiang


参考:批处理实现停用、启用本地连接
http://bbs.bathome.net/thread-3860-1-1.html
作者: lxzzr    时间: 2011-9-25 15:14

回复 8# ygqiang
那两个操作只是复制你一楼的代码,我在上面也讲了,不保证netsh启用、禁用网卡有效...
作者: ygqiang    时间: 2011-9-25 16:33

解决了。
  1. rem 单网卡(Intel 21140-Based PCI Fast Ethernet Adapter (Generic))、XPSP3下测试通过
  2. @echo off
  3. pushd "%~dp0\"
  4. SetLocal EnableDelayedExpansion
  5. rem 下面两行请自行修改
  6. set NetConnectionID=本地连接
  7. set NetworkAddress=002170BC708E
  8. set Fullkey="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class"
  9. rem 获取“本地连接”的设备名称
  10. for /f "delims=" %%a in ('wmic nic where "netconnectionid='%NetConnectionID%'" get name /value') do call set %%a>nul 2>nul
  11. regedit.exe /e %temp%\clsid.reg %Fullkey%
  12. rem 分析注册表
  13. echo.正在分析注册表文件...
  14. for /f "delims=:" %%a in ('Type "%temp%\clsid.reg" ^| findstr /ni /c:"%name%"') do (
  15.         for /l %%i in (100,-1,1) do (
  16.                 set /a Line = %%a - %%i
  17.                 for /f "tokens=2 delims=:" %%b in ('Type "%temp%\clsid.reg" ^| findstr /n .* ^| findstr /b !Line!:') do (
  18.             echo.%%b | findstr /i %Fullkey% >nul 2>nul
  19.                         if !errorlevel! == 0 set CLSID=%%b
  20.                 )
  21.         )
  22. )
  23. rem 使用reg add命令修改物理地址
  24. reg add "%CLSID:~1,-1%" /v NetworkAddress /d %NetworkAddress% /f
  25. rem 禁用网卡
  26. for /f "tokens=2 delims=&" %%a in ('devcon find pci\*^|findstr /c:"Fast Ethernet"') do (
  27.   devcon DISABLE *%%a*>NUL
  28. )
  29. rem 启用网卡
  30. for /f "tokens=2 delims=&" %%a in ('devcon find pci\*^|findstr /c:"Fast Ethernet"') do (
  31.   devcon ENABLE *%%a*>NUL
  32. )
  33. erase "%temp%\clsid.reg"
  34. exit
复制代码
xp sp3系统下测试通过。


其中的devcon从这里下载。
http://bbs.bathome.net/thread-743-1-1.html
作者: Batcher    时间: 2011-9-25 17:56

回复 11# ygqiang


请不要重复上传附件浪费空间
给个链接就行了
作者: ygqiang    时间: 2011-9-26 06:04

好的。。。。。
作者: yaojogd    时间: 2011-10-24 23:18

回复 4# lxzzr


    好象没有输出结果..我测试了几次都没得到文件

还有注册表定位在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}这里比较好``网络设备好象都是在这里




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