标题: [注册表类] 批处理如何获取注册表里指定主键下指定项的值/数据为指定内容所在的子健的路径 [打印本页]
作者: freesoft00 时间: 2016-11-6 16:02 标题: 批处理如何获取注册表里指定主键下指定项的值/数据为指定内容所在的子健的路径
本帖最后由 pcl_test 于 2016-11-6 20:24 编辑
如何搜索得到注册表的路径地址- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\3D8FA0AD52637E54F8E536A11B9F2237\InstallProperties
- DisplayName REG_SZ VMware Tools
-
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\65FC11932FE9AB9348A62CB73DDC6058\InstallProperties
- DisplayName REG_SZ Microsoft .NET Framework 4.5.2
复制代码
例如上面两个注册表键值,我想知道DisplayName 是Microsoft .NET Framework 4.5.2的注册表路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\65FC11932FE9AB9348A62CB73DDC6058\InstallProperties,并把这个地址设置为变量st以备后面使用。
我现在知道下面的命令- reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products /v DisplayName /s
复制代码
可以得到上面的键值,具体到我的要求这个批处理应该如何写呢?
谢谢!
作者: freesoft00 时间: 2016-11-6 16:24
并没有搜索到呀。
注册表路径
reg query作为关键词没有搜索到我想要的结果?或者你说一个关键词也可以。
作者: pcl_test 时间: 2016-11-6 16:38
本帖最后由 pcl_test 于 2016-11-6 17:00 编辑
回复 2# freesoft00
http://www.bathome.net/viewthread.php?tid=42108
你要先培养解题思路,自己要先有思路、步骤,再让代码去实现思路(当然不愿学可以略过),比如第一步执行reg query 主键 \v 项 /s,显示如下
主键\子健一
项 类型 值
空行
主键\子健二
项 类型 值
空行
……
看到规律没,两行为一组间隔一个空行,那么可以判断每组第2行项的值是否为指定内容,是的话则输出每组第1行的子健路径
作者: DiamondbacK 时间: 2016-11-6 17:27
- @echo off
- setlocal
-
- call :search DisplayName "Microsoft .NET Framework 4.5.2" st
- set st
-
- endlocal
- pause
- exit /b
-
- :search
- for /f "tokens=1,2,*" %%I in ('
- reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products /v %1 /s
- ') do (
- if /i "%%K" == "%~2" goto :eof
- set "%~3=%%I"
- )
- goto :eof
复制代码
作者: pcl_test 时间: 2016-11-6 20:11
- @echo off
- rem win7及以上系统运行
- mode con cols=180
- set "key=HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products"
- set "item=DisplayName"
- set "value=Microsoft .NET Framework 4.5.2"
- for /f "tokens=1*delims=:" %%a in ('powershell -c "dir '%key%'|%%{dir Registry::$($_.Name)|?{$_.Name -match '\\InstallProperties$'}|%%{$a=gp Registry::$($_.Name);if($a.%item% -eq '%value%'){$a.PSPath}}}"^|find "HKEY"') do set /a n+=1&call set "#%%n%%=%%b"
- set #
- pause
复制代码
作者: pcl_test 时间: 2016-11-6 20:11
- /*&cls
- @echo off
- set "key=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products"
- for /f "delims=" %%a in ('reg query "%key%" /v DisplayName /s^|cscript -nologo -e:jscript "%~f0"') do set/an+=1&call set "#%%n%%=%%a"
- set #
- pause&exit
- */
- var text = WSH.StdIn.ReadAll(), s='',m;
- var str = 'Microsoft .NET Framework 4.5.2';
- var str = str.replace(/[.+$^\[\](){}]/g,'\\$&')
- var reg = new RegExp('(HKEY_.+?)\\n.+?\\S+?\\s+?'+str+'\s*([\\r\\n]|$)', 'g');
- while((m = reg.exec(text)) != null)s+=m[1]+'\r\n';
- WSH.echo(s);
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |