Board logo

标题: [注册表类] 批处理如何获取注册表里指定主键下指定项的值/数据为指定内容所在的子健的路径 [打印本页]

作者: freesoft00    时间: 2016-11-6 16:02     标题: 批处理如何获取注册表里指定主键下指定项的值/数据为指定内容所在的子健的路径

本帖最后由 pcl_test 于 2016-11-6 20:24 编辑

如何搜索得到注册表的路径地址
  1. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\3D8FA0AD52637E54F8E536A11B9F2237\InstallProperties
  2.     DisplayName    REG_SZ    VMware Tools
  3. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\65FC11932FE9AB9348A62CB73DDC6058\InstallProperties
  4.     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以备后面使用。
我现在知道下面的命令
  1. 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

  1. @echo off
  2. setlocal
  3. call :search DisplayName "Microsoft .NET Framework 4.5.2" st
  4. set st
  5. endlocal
  6. pause
  7. exit /b
  8. :search
  9. for /f "tokens=1,2,*" %%I in ('
  10.   reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products /v %1 /s
  11. ') do (
  12.   if /i "%%K" == "%~2" goto :eof
  13.   set "%~3=%%I"
  14. )
  15. goto :eof
复制代码

作者: pcl_test    时间: 2016-11-6 20:11

  1. @echo off
  2. rem win7及以上系统运行
  3. mode con cols=180
  4. set "key=HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products"
  5. set "item=DisplayName"
  6. set "value=Microsoft .NET Framework 4.5.2"
  7. 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"
  8. set #
  9. pause
复制代码

作者: pcl_test    时间: 2016-11-6 20:11

  1. /*&cls
  2. @echo off
  3. set "key=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products"
  4. for /f "delims=" %%a in ('reg query "%key%"  /v DisplayName /s^|cscript -nologo -e:jscript "%~f0"') do set/an+=1&call set "#%%n%%=%%a"
  5. set #
  6. pause&exit
  7. */
  8. var text = WSH.StdIn.ReadAll(), s='',m;
  9. var str = 'Microsoft .NET Framework 4.5.2';
  10. var str = str.replace(/[.+$^\[\](){}]/g,'\\$&')
  11. var reg = new RegExp('(HKEY_.+?)\\n.+?\\S+?\\s+?'+str+'\s*([\\r\\n]|$)', 'g');
  12. while((m = reg.exec(text)) != null)s+=m[1]+'\r\n';
  13. WSH.echo(s);
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2