找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 35725|回复: 13

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

[复制链接]
发表于 2011-9-24 01:20:37 | 显示全部楼层 |阅读模式
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下)?

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2011-9-24 01:35:08 | 显示全部楼层
这个的关键就是有线网卡的序号。

需要在4D36E972-E325-11CE-BFC1-08002BE10318键值下一个个的找
 楼主| 发表于 2011-9-24 01:39:20 | 显示全部楼层
不同电脑的有线网卡mac地址,注册表里面对应的位置不同


批处理能否实现智能判断呢?
发表于 2011-9-24 14:03:40 | 显示全部楼层

  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
复制代码
 楼主| 发表于 2011-9-24 18:57:23 | 显示全部楼层
多谢版主。

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

给个提示啊,谢谢
 楼主| 发表于 2011-9-24 19:07:02 | 显示全部楼层
直接运行4楼的批处理。

结果如下:
发表于 2011-9-25 00:45:12 | 显示全部楼层

  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 能启用、禁用网卡...

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-9-25 13:29:57 | 显示全部楼层
多谢。

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

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

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

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

有没有别的批处理方法,让有线网卡的mac地址显示修改后的?
发表于 2011-9-25 13:48:29 | 显示全部楼层
回复 8# ygqiang


参考:批处理实现停用、启用本地连接
http://bbs.bathome.net/thread-3860-1-1.html
发表于 2011-9-25 15:14:36 | 显示全部楼层
回复 8# ygqiang
那两个操作只是复制你一楼的代码,我在上面也讲了,不保证netsh启用、禁用网卡有效...
 楼主| 发表于 2011-9-25 16:33:34 | 显示全部楼层
解决了。
  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
发表于 2011-9-25 17:56:16 | 显示全部楼层
回复 11# ygqiang


请不要重复上传附件浪费空间
给个链接就行了
 楼主| 发表于 2011-9-26 06:04:51 | 显示全部楼层
好的。。。。。
发表于 2011-10-24 23:18:45 | 显示全部楼层
回复 4# lxzzr


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

还有注册表定位在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}这里比较好``网络设备好象都是在这里
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:19 , Processed in 0.017500 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表