中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]如何判断注册表特定位置是否存在特定键值
作者:
标题: [已解决]如何判断注册表特定位置是否存在特定键值 上一主题 | 下一主题
renol
初级用户





积分 22
发帖 17
注册 2007-12-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 ]

2009-12-30 11:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
renol
初级用户





积分 22
发帖 17
注册 2007-12-11
状态 离线
『第 2 楼』:  

修改了一下标题,希望不会误导热心的朋友
顶起来看看

2010-1-5 11:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
renol
初级用户





积分 22
发帖 17
注册 2007-12-11
状态 离线
『第 3 楼』:  

参考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 ]

2010-1-5 12:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qinchun36
高级用户

据说是李先生


积分 609
发帖 400
注册 2008-4-23
状态 离线
『第 4 楼』:  

那就用最笨的方法嘛:

第一步:执行查询,如果不存在的话会出错,根据 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




┏━━━━━━┓
┃据说是李先生┃
┠──────┨
┃*ntRSS┃
┗━━━━━━┛
2010-1-5 13:32
查看资料  发送邮件  发短消息 网志  OICQ (182484135)  编辑帖子  回复  引用回复
renol
初级用户





积分 22
发帖 17
注册 2007-12-11
状态 离线
『第 5 楼』:  

很感谢4楼 qinchun36 的解决方法
我之前也看到有人用errorlevel来判断,自己尝试用它实现判断,但是总是失败
你的方法很好,也能实现判断,这里我学习了!!

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

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

[ Last edited by renol on 2010-1-5 at 14:34 ]

2010-1-5 14:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: