中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-13 02:51
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [已解决]如何判断注册表特定位置是否存在特定键值
可打印版本  1,503 / 4
第1楼 renol 发表于 2009-12-30 11:11
初级用户 发帖 17 积分 22
[已解决]如何判断注册表特定位置是否存在特定键值
自己写了个批处理,针对某个软件进行设置
需要先判断该机器是否安装了这个软件
是的话继续操作,不是的话提示该机未装软件,不需要运行此批处理


以QQ为例
可以根据注册表中
HKLM\SOFTWARE\TENCENT\QQ 下的
Install键值获取QQ的安装目录
现在需要判断 Install 键是否存在,存在则 goto task,不存在则 goto :eof
另想问问,如果存在,且值非空,则goto task ,为空则 goto :eof

知识有限,还请大家帮忙 :)


@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 ]
第2楼 renol 发表于 2010-01-05 11:45
初级用户 发帖 17 积分 22
修改了一下标题,希望不会误导热心的朋友
顶起来看看
第3楼 renol 发表于 2010-01-05 12:58
初级用户 发帖 17 积分 22
参考lxmxn在其他朋友的帖子中贴出的解决办法,以及忘记某位仁兄的找到收藏夹的所在位置的方法,结合了一下
凑合解决了自己的问题:

@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

@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 ]
第4楼 qinchun36 发表于 2010-01-05 13:32
高级用户 发帖 400 积分 609
那就用最笨的方法嘛:

第一步:执行查询,如果不存在的话会出错,根据 errorlevel 就能判断了撒;

第二步:如果没报错就再执行一次,取出那个值看看是不是空的;

第三步:如果不是空的再跳到 task。


第5楼 renol 发表于 2010-01-05 14:33
初级用户 发帖 17 积分 22
很感谢4楼 qinchun36 的解决方法
我之前也看到有人用errorlevel来判断,自己尝试用它实现判断,但是总是失败
你的方法很好,也能实现判断,这里我学习了!!

不仅判断了是否存在,还判断了是否空值,很好很好 :)

呵呵,看来我不着急解决问题的时候,要多找点时间系统的学学基础知识啊!!

[ Last edited by renol on 2010-1-5 at 14:34 ]
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023