 『楼 主』:
[原创]获取注册表值的完整解决方案
翻了一下论坛帖子,遇到很多关于查询注册表值的一些问题,我这里整理了一下查询的完整解决方案,以解决查询时带来的各种问题.
@echo off
ECHO 注册表查询实例
ECHO 以查询程序中启动为例
ECHO 本程序由小不点演示QQ:9399100
SET REGFK= "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
SET REGQV="Startup"
ECHO.
ECHO.
ECHO ===============================================================================
ECHO 方法一.使用REG EXPORT命令,该命令常用于备份注册表和数据查询
ECHO 优点:易于提取数据,提取的路径含有\\引号,如果提取路径含有引号可用FOR变量的~去掉
ECHO 缺点:查询BINARY,EXPAND_SZ,MULTI_SZ数据类型时则结果异常(与肉眼看到的不同).
ECHO ===============================================================================
ECHO.
REG EXPORT %REGFK% "%TEMP%\TEMP.reg" /NT4>NUL
FOR /F "tokens=2 delims==" %%A in ('FIND /I %REGQV% "%TEMP%\TEMP.reg"') DO ECHO 查询结果:%%~A
ECHO.
PAUSE
ECHO.
CLS
ECHO ===============================================================================
ECHO 方法二.使用REG QUERY命令,该命令常用于单个注册表数据查询
ECHO 优点:可以避免REG EXPORT的缺点,可查询BINARY,EXPAND_SZ,MULTI_SZ数据类型
ECHO 缺点:其致命缺点是如果是中文则会"吃掉"最后的字符,但WIN2003的REG已修正这个BUG.
ECHO ===============================================================================
ECHO.
FOR /F "TOKENS=2,*" %%A IN ('REG2K3 QUERY %REGFK% /V %REGQV%^|FIND /I %REGQV%') DO ECHO 查询结果:%%B
ECHO.
PAUSE
CLS
ECHO ===============================================================================
ECHO 方法三.使用第三方工具如REGFIND命令和微软SERVER版中资源包中的一个REGFIND工具
ECHO 说明:这个不做过多说明,一般对中文支持不是很好.
ECHO ===============================================================================
ECHO.
PAUSE
CLS
ECHO ===============================================================================
ECHO 方法四.使用VBS,使用Wscript.Shell对象可以方便的读写注册表
ECHO 优点:不仅可以方便的操作注册表,还解除了REG命令的所有困惑.
ECHO 缺点:获取的变量批量返回给CMD比较难处理
ECHO ===============================================================================
ECHO.
ECHO.
>"%TEMP%\TEMP.VBS" ECHO Set WshShell = Wscript.CreateObject("Wscript.Shell")
>>"%TEMP%\TEMP.VBS" ECHO REGQV=WshShell.RegRead(%REGFK% + "\" + %REGQV%)
>>"%TEMP%\TEMP.VBS" ECHO Wscript.echo REGQV
For /f "delims=" %%A In ('cscript //nologo "%TEMP%\Temp.vbs"') DO (ECHO 查询结果:%%A)
ECHO.
ECHO 演示完毕,按任意键退出程序
PAUSE>NUL
IF EXIST "%TEMP%\TEMP.VBS" DEL /F/Q "%TEMP%\TEMP.VBS"
IF EXIST "%TEMP%\TEMP.REG" DEL /F/Q "%TEMP%\TEMP.REG"
EXIT
|