标题: [注册表类] 请教批处理如何搜索一个注册表的键值作为一个变量? [打印本页]
作者: wxl42640211 时间: 2015-2-16 10:59 标题: 请教批处理如何搜索一个注册表的键值作为一个变量?
是这样的,我的目的是获取某个MSI包的 GUID值,这个MSI会经常更新,所以GUID值会变,但是这个MSI包的DisplayName是固定的而且是唯一的,所以想通过搜索DisplayName确定这个MSI包所在注册表的具体路径,然后找到这个路径下键位UninstallString的值(也就是GUID),并将其设置为变量
MSI包在注册表下HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ ,但无法确定具体路径
我需要在这个路径下 搜索到一个名为Displayname的键,其值为“21413181” ,这样就可以确定了MSI包的具体路径,比如应该是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ {FA8AS8-AS7ASD-ASDSADA}
那么接下来在上面这个路径下 ,找出UninstallString的键值,并设置为变量就算成功了
有哪位高手能帮帮我吗?真的很急需啊,好人一生平安~~~~~~~~~~~~~~
作者: apang 时间: 2015-2-16 14:00
本帖最后由 apang 于 2015-2-17 17:29 编辑
- @echo off
- set "s1=DisplayName"
- set "s2=21413181"
- set "s3=UninstallString"
- set "k=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
- for /f "delims=" %%i in ('reg query "%k%" /s^|findstr /ib HKEY') do (
- set "flag=" & set "var="
- for /f "tokens=1,2*" %%a in ('reg query "%%i"') do (
- if /i "%%a.%%c" == "%s1%.%s2%" set "flag=1"
- if /i "%%a" == "%s3%" set "var=%%c"
- )
- if defined flag if defined var goto :Next
- )
- pause & exit/b
-
- :Next
- echo,%var%
- pause
复制代码
作者: apang 时间: 2015-2-16 14:20
本帖最后由 apang 于 2015-2-28 10:21 编辑
- @set @n=0;/* & echo off
- set "k=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
- set "Js=cscript -nologo -e:jscript"
- for /f "tokens=2*" %%a in ('reg query %k% /s^|%Js% "%~0"') do set "var=%%b"
- echo,%var%
- pause & exit/b */
-
- txt = WScript.StdIn.ReadAll() + "\r\nHKEY";
- re = /^HKEY[\s\S]+?(?=^HKEY)/img;
- while ((arr=re.exec(txt)) != null) {
- a = arr[0].match(/\bDisplayName\b +REG_SZ +(.*)\r\n/i);
- b = arr[0].match(/\bUninstallString\b.*\n/i);
- if (a && b) {
- if (a[1] == "Wolves (Application Proxy)") {
- WScript.Echo(b[0]); break
- }
- }
- }
复制代码
WinXP系统中,reg query 得到的结果与Win7有所不同
WinXP:注册表值、类型、数据之间以Tab分割(即DisplayName与REG_SZ之间以Tab分割)
Win7:注册表值、类型、数据之间以空格分割
第11行改成:- a = arr[0].match(/\bDisplayName\s+REG_SZ\s+(.*)\r\n/i);
复制代码
可两者兼顾
作者: wxl42640211 时间: 2015-2-16 14:25
apang 发表于 2015-2-16 14:20
哇塞,大神你太厉害了,我这就去试试
作者: wxl42640211 时间: 2015-2-16 15:12
回复 3# apang
请问大神,关键字21413181 这个 如果想换成带有空格和括号的 应该如何填写呢? 比如换成 Wolves (Application Proxy)
作者: apang 时间: 2015-2-16 15:46
本帖最后由 apang 于 2015-2-16 15:48 编辑
回复 5# wxl42640211
3#已修改,直接修改第15行字串值(注意大小写)
作者: wxl42640211 时间: 2015-2-16 16:51
回复 6# apang
谢谢大神
作者: yiwuyun 时间: 2015-2-16 23:24
回复 3# apang
第13行怎么不用第12行一样的写法,直接就找出,而偏偏要把整行找出喃。没测试,不晓得对否.
作者: apang 时间: 2015-2-17 17:19
回复 8# yiwuyun
是的,匹配子项也可以的。
按照楼主的意图,无论是匹配整行,还是匹配子项,最后都得交给for来赋值var
貌似匹配整行要简单那么一丁点
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |