标题: [注册表类] [已解决]用批处理修改计算机的有线网卡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地址:- rem 先禁用网卡
- netsh interface set interface "本地连接" disable
-
- rem 使用reg add命令修改物理地址
- reg add HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002BE10318}/0004 /v NetworkAddress /d 要修改的值 /f
-
- rem 再启用网卡
- netsh interface set interface "本地连接" enable
复制代码
还原网卡MAC地址:- netsh interface set interface "本地连接" disable
-
- rem 使用reg delete命令删除NetworkAdress项,也就还原的原MAC地址
- reg delete HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/{4D36E972-E325-11CE-BFC1-08002BE10318}/0004 /v NetworkAddress /f
-
- 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
- @echo off
- pushd "%~dp0\"
- SetLocal EnableDelayedExpansion
-
- set Adapter="NVIDIA nForce Networking Controller"
- rem 你的网络设备名称
-
- set Fullkey="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class"
-
- echo.正在导出注册表文件...
- regedit.exe /e %temp%\clsid.reg %Fullkey%
-
- echo.正在分析注册表文件...
- for /f "delims=:" %%a in ('Type "%temp%\clsid.reg" ^| findstr /ni /c:%Adapter%') do (
- for /l %%i in (100,-1,1) do (
- set /a Line = %%a - %%i
- for /f "tokens=2 delims=:" %%b in ('Type "%temp%\clsid.reg" ^| findstr /n .* ^| findstr /b !Line!:') do (
-
- echo.%%b | findstr /i %Fullkey% >nul 2>nul
- if !errorlevel! == 0 set CLSID=%%b
- )
- )
- )
-
- ECHO.%CLSID:~1,-1%
- erase "%temp%\clsid.reg"
- echo.按任意键退出...
- pause >nul
复制代码
作者: ygqiang 时间: 2011-9-24 18:57
多谢版主。
但你的代码,如何配合1楼的那个bat文件使用?
给个提示啊,谢谢
作者: ygqiang 时间: 2011-9-24 19:07
直接运行4楼的批处理。
结果如下:
作者: lxzzr 时间: 2011-9-25 00:45
- rem 单网卡(Intel 21140-Based PCI Fast Ethernet Adapter (Generic))、XPSP3下测试通过
- @echo off
- pushd "%~dp0\"
- SetLocal EnableDelayedExpansion
-
- rem 下面两行请自行修改
- set NetConnectionID=本地连接
- set NetworkAddress=111122223333
-
- set Fullkey="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class"
-
- rem 获取“本地连接”的设备名称
- for /f "delims=" %%a in ('wmic nic where "netconnectionid='%NetConnectionID%'" get name /value') do call set %%a>nul 2>nul
-
- regedit.exe /e %temp%\clsid.reg %Fullkey%
-
- rem 分析注册表
- echo.正在分析注册表文件...
- for /f "delims=:" %%a in ('Type "%temp%\clsid.reg" ^| findstr /ni /c:"%name%"') do (
- for /l %%i in (100,-1,1) do (
- set /a Line = %%a - %%i
- for /f "tokens=2 delims=:" %%b in ('Type "%temp%\clsid.reg" ^| findstr /n .* ^| findstr /b !Line!:') do (
- echo.%%b | findstr /i %Fullkey% >nul 2>nul
- if !errorlevel! == 0 set CLSID=%%b
- )
- )
- )
-
- rem 使用reg add命令修改物理地址
- reg add "%CLSID:~1,-1%" /v NetworkAddress /d %NetworkAddress% /f
-
- rem 禁用网卡
- netsh interface set interface "本地连接" disable
-
- rem 启用网卡
- netsh interface set interface "本地连接" enable
-
- erase "%temp%\clsid.reg"
- echo.按任意键退出...
- 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
解决了。- rem 单网卡(Intel 21140-Based PCI Fast Ethernet Adapter (Generic))、XPSP3下测试通过
- @echo off
- pushd "%~dp0\"
- SetLocal EnableDelayedExpansion
-
- rem 下面两行请自行修改
- set NetConnectionID=本地连接
- set NetworkAddress=002170BC708E
-
- set Fullkey="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class"
-
- rem 获取“本地连接”的设备名称
- for /f "delims=" %%a in ('wmic nic where "netconnectionid='%NetConnectionID%'" get name /value') do call set %%a>nul 2>nul
-
- regedit.exe /e %temp%\clsid.reg %Fullkey%
-
- rem 分析注册表
- echo.正在分析注册表文件...
- for /f "delims=:" %%a in ('Type "%temp%\clsid.reg" ^| findstr /ni /c:"%name%"') do (
- for /l %%i in (100,-1,1) do (
- set /a Line = %%a - %%i
- for /f "tokens=2 delims=:" %%b in ('Type "%temp%\clsid.reg" ^| findstr /n .* ^| findstr /b !Line!:') do (
- echo.%%b | findstr /i %Fullkey% >nul 2>nul
- if !errorlevel! == 0 set CLSID=%%b
- )
- )
- )
-
- rem 使用reg add命令修改物理地址
- reg add "%CLSID:~1,-1%" /v NetworkAddress /d %NetworkAddress% /f
-
-
- rem 禁用网卡
- for /f "tokens=2 delims=&" %%a in ('devcon find pci\*^|findstr /c:"Fast Ethernet"') do (
- devcon DISABLE *%%a*>NUL
- )
-
- rem 启用网卡
- for /f "tokens=2 delims=&" %%a in ('devcon find pci\*^|findstr /c:"Fast Ethernet"') do (
- devcon ENABLE *%%a*>NUL
- )
-
-
- erase "%temp%\clsid.reg"
- 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 |