[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[注册表类] 【已解决】请问如何查找注册表内的关键字并以此判断程序是否在运行

本帖最后由 solan 于 2015-11-21 14:50 编辑

某软件的某个版本运行时在注册表内即时产生如下条目:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\KL\Running Applications]
"KL V26.5 1"=dword:0000c43a
"KL V26.5 2"=dword:0000d4c4
也就是关键字是KL V26.5,后面是序列号,表示同时运行了几个软件,
那么请问如何查找注册表内的关键字KL V26.5并以此判断程序是否在运行呢?
拜托各位说说这个批处理怎么写?谢谢!

本帖最后由 solan 于 2015-11-21 13:24 编辑

如果这样写,查不到
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. ::CODER BY Administrator POWERD BY iBAT
  4. REG QUERY "HKCU\Software\KL\Running Applications" /v "KL V26.5" && @echo KL8.5正在运行。。。
  5. pause
复制代码
如果下面这样写,那么当关掉第一个打开的软件窗口的时候,也就是没有KL V26.5 1这个值了,但是此时可能有KL V26.5 2或者KL V26.5 3等等,
由于查不到KL V26.5 2或KL V26.5 3等等,就提示软件没在运行,其实在运行呢。
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. ::CODER BY Administrator POWERD BY iBAT
  4. REG QUERY "HKCU\Software\KL\Running Applications" /v "KL V26.5 1" && @echo KL8.5正在运行。。。
  5. pause
复制代码
难不成我要把所有的值都写上吗?如果打开了100个KL8.5软件的窗口,那我岂不是要写到KL V26.5 100了吗?
此处不明,请版主指点一二!!

TOP

  1. @echo off
  2. set "s=HKCU\Software\KL\Running Applications"
  3. for /f %%i in ('reg query "%s%"^|findstr /i /r /c:"^ *KL V26\.5 [0-9][0-9]*"^|find /c /v ""')do (
  4.     echo 有 %%i 个程序在运行
  5. )
  6. pause
复制代码

TOP

回复 3# WHY

非常感谢,测试成功

TOP

本帖最后由 solan 于 2015-11-21 15:36 编辑

不过我不懂括号里面的意思,在哪儿可以学到这些,如果方便的话,请指引一下

TOP

回复 5# solan


    建议你学一下 FOR 和 FINDSTR 的用法,搜索本论坛即可得到教程

括弧里的意思是,reg query 的结果通过管道符“|”传给 findstr,findstr 找到以空格开头、后面接 KL V26.5 和数字的行,再通过管道传给 FIND 来统计行数

TOP

好复杂,一时搞不明白,去搜索看看,再次感谢,你太给力了

TOP

返回列表