标题: [已解决]如何判断注册表特定位置是否存在特定键值
[打印本页]
作者: renol
时间: 2009-12-30 11:11
标题: [已解决]如何判断注册表特定位置是否存在特定键值
自己写了个批处理,针对某个软件进行设置
需要先判断该机器是否安装了这个软件
是的话继续操作,不是的话提示该机未装软件,不需要运行此批处理
以QQ为例
可以根据注册表中
HKLM\SOFTWARE\TENCENT\QQ 下的
Install键值获取QQ的安装目录
现在需要判断 Install 键是否存在,存在则 goto task,不存在则 goto :eof
另想问问,如果存在,且值非空,则goto task ,为空则 goto :eof
知识有限,还请大家帮忙 :)
Quote: |
@echo off
for /f "tokens=2,*" %%i in ('reg query "HKLM\SOFTWARE\TENCENT\QQ" /v "Install"') do (
set QQ=%%j
)
echo 本机QQ目录位于 %QQ%
pause
参照本论坛其他朋友关于 收藏夹 的解决方法修改的 |
|
[
Last edited by renol on 2010-1-5 at 14:38 ]
作者: renol
时间: 2010-1-5 11:45
修改了一下标题,希望不会误导热心的朋友
顶起来看看
作者: renol
时间: 2010-1-5 12:58
参考lxmxn在其他朋友的帖子中贴出的解决办法,以及忘记某位仁兄的找到收藏夹的所在位置的方法,结合了一下
凑合解决了自己的问题:
Quote: |
@ECHO OFF
reg export "HKLM\SOFTWARE\TENCENT\QQ" QQ.reg /nt4>nul
findstr /i "Install" QQ.reg >nul && goto right || goto wrong
:wrong
echo.
echo 这台机器没有安装QQ
echo.
pause>nul
goto :eof
:right
for /f "tokens=2,*" %%i in ('reg query "HKLM\SOFTWARE\TENCENT\QQ" /v "Install"') do (
set QQdir=%%j
)
echo.
echo QQ路径为:%QQdir%
pause>nul
goto :eof |
|
不过有个麻烦,参数/nt4 的作用
在XP下,有这个参数才能成功执行命令,才能判断正确
Windows 2003 不支持reg export 的参数 /nt4 ,始终无法判断正确
避免使用参数 /nt4 Quote: |
@echo off &setlocal enabledelayedexpansion
for /f "tokens=1,2,*" %%i in ('reg query "HKLM\SOFTWARE\TENCENT\QQ" ^| find /i "Install"') do ( goto right)
:wrong
echo.
echo 这台机器没有安装QQ
pause>nul
goto :eof
:right
for /f "tokens=2,*" %%i in ('reg query "HKLM\SOFTWARE\TENCENT\QQ" /v "Install"') do (
set QQdir=%%j
)
echo.
echo QQ路径为:%QQdir%
pause>nul
goto :eof |
|
[
Last edited by renol on 2010-1-5 at 14:15 ]
作者: qinchun36
时间: 2010-1-5 13:32
那就用最笨的方法嘛:
第一步:执行查询,如果不存在的话会出错,根据 errorlevel 就能判断了撒;
第二步:如果没报错就再执行一次,取出那个值看看是不是空的;
第三步:如果不是空的再跳到 task。
@echo off
::要执行的注册表查询命令
set REG_QUERY_COMMAND=reg query "HKLM\SOFTWARE\TENCENT\QQ" /v "Install"
%REG_QUERY_COMMAND% 1>nul 2>&1
if errorlevel 1 (
echo 本机没有安装 QQ2008 及更低版本
goto eof
) else (
setlocal enabledelayedexpansion
set "ching="
::根据 reg query 命令输出的特殊格式,才能知道哪个部分是显示数据的,并据此判断
for /f "tokens=2,*" %%i in ('%REG_QUERY_COMMAND%') do (
set "ching=%%j"
)
if "!ching!"=="" (
echo 查询的值为空。
goto eof
) else (
goto task
)
endlocal
)
:task
for /f "tokens=2,*" %%i in ('%REG_QUERY_COMMAND%') do (
set QQ=%%j
)
echo 本机QQ目录位于 %QQ%
:eof
echo.
echo ===我是华丽的 KOF ===
pause>nul
exit
作者: renol
时间: 2010-1-5 14:33
很感谢4楼 qinchun36 的解决方法
我之前也看到有人用errorlevel来判断,自己尝试用它实现判断,但是总是失败
你的方法很好,也能实现判断,这里我学习了!!
不仅判断了是否存在,还判断了是否空值,很好很好 :)
呵呵,看来我不着急解决问题的时候,要多找点时间系统的学学基础知识啊!!
[
Last edited by renol on 2010-1-5 at 14:34 ]