标题: [注册表类] [已解决]批处理如何根据网卡ID读取注册表值,判断文件名、搜索、修改指定文本? [打印本页]
作者: wrz99 时间: 2011-7-25 15:50 标题: [已解决]批处理如何根据网卡ID读取注册表值,判断文件名、搜索、修改指定文本?
可以了,2003和XP系统都没有问题了!
曾经为了这个问题头大了半年啊!
现在的心情很激动,实在太感谢tmplinshi版主,谢谢你!
如何根据网卡硬件ID 读取注册表值,自动判断文件名、搜索、修改指定文本?
目地:自动识别当前网卡型号,并导入优化文件。
首先,以8111D网卡为例:我用“devcon.exe hwids PCI\CC_0200 >>c:\网卡ID.txt”命令
得到的网卡型号:PCI\VEN_10EC&DEV_8168&SUBSYS_23091565&REV_03\4&2BA546C5&0&0038 (如下图)(型号8168,版本REV_03 即8111D网卡)
同为VEN_10EC&DEV_8168,但如果REV版本号不一样,型号也就不一样,关系如下
8111D: REV_03
8111DP/DL: REV_04
8111E: REV_06
8111F: REV_07
8111ES: REV_08
[attach]4163[/attach]
[attach]4163[/attach]
注:视其它网卡不存在这种版本号区别。
第一步:.根据网卡ID,自动读取HKLM\SYSTEM\ControlSet001\Enum\PCI\VEN_10EC&DEV_8168&SUBSYS_23091565&REV_03\4&2BA546C5&0&0038下的Driver值 最后面的4位数字。(如下图)
Driver={4D36E972-E325-11CE-BFC1-08002BE10318}\0008
第二步:.(如下图)还是根据PCI\VEN_10EC&DEV_8168&SUBSYS_23091565&REV_03\4&2BA546C5&0&0038,自动搜索D:\网卡优化\下的同名.REG文件,并用"第一步"得到的值 替换掉同名文件中HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\的后4位数字.
第三步:. regedit /s "当前修改后的.reg文件"
作者: wrz99 时间: 2011-7-25 15:51
本帖最后由 wrz99 于 2011-7-25 16:50 编辑
为能简单明了,此贴我用了近3小时精炼文字。。
不知大家能明白我的意图没有?
DevCon官方下载地址:
立即下载 DevCon 软件包。 (http://download.microsoft.com/do ... 7f3e0240/devcon.exe) 发布日期:2003 年 1 月 29 日
VEN_10EC&DEV_8168&REV_03.reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0008]
;(禁止)网卡关闭节约用电(禁56-或dword:00000038,开48,十进制值)
"nPCapabilities"=dword:00000038
;(关闭)大量传送减负
"Largesend"="0"
;(关闭)关机 网络唤醒
"S5WakeOnLan"="0"
;(关闭)环保节能
"GreenEthernet"="0"
;(关闭)流控制
"FlowControl"="0"
;(关闭)网路唤醒模式
"WolCap"="0"
;(关闭)硬件校验和
"CksOffload"="0"
;(关闭)自动关闭 PCIe (省电)
"AutoLinkDownPcieMacOff"="0"
;(关闭)自动关闭 PHY (省电)
"AutoLinkDownPhyOff"="0"
作者: tmplinshi 时间: 2011-7-25 17:46
- @echo off
-
- devcon.exe hwids PCI\CC_0200 >c:\网卡ID.txt
-
- set /p var=<c:\网卡ID.txt
-
- :: 搜索注册表
- set RegPath="HKLM\SYSTEM\ControlSet001\Enum\PCI\%var:*PCI\=%"
- for /f "skip=4 tokens=*" %%a in ('reg query %RegPath% /v Driver') do (
- set Driver=%%~na
- )
-
- :: 修改 reg 文件
- for /f "tokens=2,3,5 delims=\&" %%a in ("%var%") do (
- set RegFile="D:\网卡优化\%%a&%%b&%%c.reg"
- )
- set SearchStr=HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class
- set SearchStr=%SearchStr%\{4D36E972-E325-11CE-BFC1-08002bE10318}\
- findstr /n .* %RegFile% >.tmp
- (
- for /f "delims=" %%a in (.tmp) do (
- set var=%%a
- setlocal enabledelayedexpansion
- if "!var:%SearchStr%=!" neq "!var!" (
- set var=!var:\%%~na=\%Driver%!
- )
- echo,!var!
- endlocal
- )
- ) >%RegFile%
- del .tmp
-
- regedit /s %RegFile%
-
- pause
复制代码
作者: wrz99 时间: 2011-7-25 19:10
本帖最后由 wrz99 于 2011-7-25 19:23 编辑
谢谢版主,我先去试试看!
出现2个问题:
1.网卡优化 目录下会生成一个同名空白的.REG文件.
2.文本内容并没有被修改!
3.能否有个提示,获取的4位数是多少就更好了!
作者: tmplinshi 时间: 2011-7-25 19:35
本帖最后由 tmplinshi 于 2011-7-25 19:36 编辑
回复 4# wrz99
运行下面的代码,把结果贴上来。- @echo off
-
- devcon.exe hwids PCI\CC_0200 >网卡ID.txt
-
- echo,
- echo ============
- type 网卡ID.txt
- echo ============
- echo,
-
- set /p var=<网卡ID.txt
-
- :: 搜索注册表
- set RegPath="HKLM\SYSTEM\ControlSet001\Enum\PCI\%var:*PCI\=%"
- for /f "skip=4 tokens=*" %%a in ('reg query %RegPath% /v Driver') do (
- set Driver=%%~na
- )
-
- set Driver
-
- echo,
- echo ============
- reg query %RegPath% /v Driver
- echo ============
- echo,
-
- :: 修改 reg 文件
- for /f "tokens=2,3,5 delims=\&" %%a in ("%var%") do (
- set RegFile="D:\网卡优化\%%a&%%b&%%c.reg"
- )
-
- set RegFile
- pause
- exit
复制代码
作者: wrz99 时间: 2011-7-25 20:56
本帖最后由 wrz99 于 2011-7-25 21:18 编辑
1.提示“环境变量 Driver 没有定义”
2.文本内容并没有被修改!
作者: tmplinshi 时间: 2011-7-26 13:54
回复 6# wrz99
你运行 5 楼的批处理后,当前目录下的“网卡ID.txt”文件为空吗?如果为空的话,之后的代码必然是无法运行的。那句 devcon 的代码也是你提供的。
作者: wrz99 时间: 2011-7-26 16:27
这是运行后的载图
说明:已经正确获取到网卡ID,只是没有正确修改.reg文件
作者: wrz99 时间: 2011-7-26 16:30
回复 7# tmplinshi
硬件ID已获取成功,只是没有修改reg文件。请您再看看!我已经截图!
作者: tmplinshi 时间: 2011-7-26 17:36
本帖最后由 tmplinshi 于 2011-7-26 18:06 编辑
回复 8# wrz99
请问你用的是什么系统?竟然 reg query 的输出与 XP SP2 的不同,XP SP2 下的输出是这样的:- 空行
- ! REG.EXE VERSION 3.0
- 空行
- HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\PCI\VEN_10EC&DEV_8139&SUBSYS_813910EC&REV_10\4&29817089&0&08F0
- Driver REG_SZ {4D36E972-E325-11CE-BFC1-08002BE10318}\0001
- 空行
复制代码
再试试:- @echo off
- setlocal
-
- devcon.exe hwids PCI\CC_0200 >c:\网卡ID.txt
-
- set /p var=<c:\网卡ID.txt
-
- :: 搜索注册表
- set Driver=
- set RegPath="HKLM\SYSTEM\ControlSet001\Enum\PCI\%var:*PCI\=%"
- for /f "tokens=*" %%a in ('reg query %RegPath% /v Driver') do (
- set Driver=%%~na
- )
-
- if not defined Driver (
- echo 获取 Driver 失败。按任意键退出...
- pause >nul
- exit /b
- ) else (
- set Driver
- )
-
- :: 修改 reg 文件
- for /f "tokens=2,3,5 delims=\&" %%a in ("%var%") do (
- set RegFile="D:\网卡优化\%%a&%%b&%%c.reg"
- )
- set SearchStr=HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class
- set SearchStr=%SearchStr%\{4D36E972-E325-11CE-BFC1-08002bE10318}\
- type %RegFile% | findstr /n .* >.tmp
- (
- for /f "delims=" %%a in (.tmp) do (
- set var=%%a
- setlocal enabledelayedexpansion
- if "!var:%SearchStr%=!" neq "!var!" (
- set var=!var:\%%~na=\%Driver%!
- )
- echo,!var:*:=!
- endlocal
- )
- ) >%RegFile%
- del .tmp
-
- regedit /s %RegFile%
-
- pause
复制代码
作者: wrz99 时间: 2011-7-26 17:44
没有错误提示,但原文件内容被清空!
作者: wrz99 时间: 2011-7-26 17:45
本帖最后由 wrz99 于 2011-7-26 17:49 编辑
对了,我的系统是2003,我在XP下面去试试!
在XP下测试也是一样,程序好像建立了一个同名文件,但内容为空!
作者: tmplinshi 时间: 2011-7-26 17:54
本帖最后由 tmplinshi 于 2011-7-26 17:58 编辑
回复 12# wrz99
请重新复制一下 10 的代码。与 3 楼的代码相比,一共修改了两处错误:
1、
for /f "skip=4 tokens=*" %%a in ('reg query %RegPath% /v Driver') do (
set Driver=%%~na
)
改成了 "tokens=*"
2、
findstr /n .* %RegFile% >.tmp
改成了
type %RegFile% | findstr /n .* >.tmp
作者: wrz99 时间: 2011-7-26 18:05
本帖最后由 wrz99 于 2011-7-26 18:07 编辑
终于可以正确修改注册表了,
但是无法导入!XP和2003都是一样!
注册表前面多了,序号和分号!
作者: tmplinshi 时间: 2011-7-26 18:08
回复 14# wrz99
太粗心了,忘记了去掉开头的行号。已修改 10 楼代码。
作者: wrz99 时间: 2011-7-26 18:18
可以了,2003和XP系统都没有问题了!
曾经为了这个问题头大了半年啊!
现在的心情很激动,实在太感谢tmplinshi版主,谢谢你!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |