找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29930|回复: 13

[注册表类] [已解]如何将注册表中查到符合指定条件的注册表键路径赋给变量?

[复制链接]
发表于 2016-10-21 19:21:00 | 显示全部楼层 |阅读模式
本帖最后由 huyou96 于 2016-10-22 11:46 编辑

在注册表里查找"HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID"所有子项中
默认值为空(默认值未设置)且含有“System.IsPinnedToNameSpaceTree”值的注册表键,
并把该注册表键的全路径
即HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}形式的字符串值
赋给一个变量?

评分

参与人数 1PB -3 收起 理由
pcl_test -3 未按版规发帖

查看全部评分

 楼主| 发表于 2016-10-21 19:22:13 | 显示全部楼层
新手求教:

"HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID"的所有子项中
俩条件:
1. 既默认值为空(默认值未设置)
2. 又含有“System.IsPinnedToNameSpaceTree”值
符合条件的查询结果的注册表路径,即HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}形式的字符串值,赋给变量并echo显示出来,这个批处理怎么写?
发表于 2016-10-21 20:20:11 | 显示全部楼层
本帖最后由 aa77dd@163.com 于 2016-10-21 20:36 编辑

回复 2# huyou96

测试于 WIN7 64BIT, 在 HKLM 下能找到如此条件的结果, 在 HKCU 下未找到结果, 代码中还是改成了 HKCU (HKEY_CURRENT_USER) 给你

  1. @echo off & setlocal enableDelayedExpansion
  2. chcp 437
  3. mode 200

  4. for /f delims^= %%a in (^
  5. 'reg query HKCU\SOFTWARE\Classes\CLSID /s /v "System.IsPinnedToNameSpaceTree" ^
  6. | findstr /r /i /c:"HKEY_CURRENT_USER\\SOFTWARE\\Classes\\CLSID\\{........-....-....-....-............}"'
  7. ) do (

  8.     >nul (reg query "%%a" /ve | find /i "(Default)    REG_SZ    (value not set)") && (
  9.         for /f tokens^=1-5delims^=\ %%A in ("%%a") do (
  10.             set "key=%%A\%%B\%%C\%%D\%%E"
  11.             echo;key=!key!
  12.         )
  13.     )
  14. )

  15. pause

  16. exit /b
复制代码

评分

参与人数 1技术 +1 收起 理由
huyou96 + 1 太牛啦,非常感谢!

查看全部评分

 楼主| 发表于 2016-10-21 20:43:53 | 显示全部楼层
本帖最后由 huyou96 于 2016-10-21 22:55 编辑

回复 3# aa77dd@163.com

谢谢大虾!太牛啦!!!
这么短时间内就把它搞掂,实在是炉火纯青的厚底子才能做到!受教啦!!!


我在 windows 10 运行结果如下:

HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}
HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{031E4825-7B94-4dc3-B131-E946B44C8DD5}
请按任意键继续. . .

C:\WINDOWS\system32>

现在我又想多加一个条件,上述俩结果都符合我开贴设置的俩条件,
第一个还多含有SortOrderIndex值共仨值,第二个只有默认值跟System.IsPinnedToNameSpaceTree值共俩值,
但我还想要结果再多加一个筛选条件:该注册表键里仅仅含有这两个值,多出其他键值者将被排除,大虾可否再帮我筛选一下?
(这样的话就可把第一个结果刨除,只筛选出第二个来了。结果筛出唯一符合条件的一个。)

大虾真得很牛!在结果中筛选不容易,这里是我直接查询两个键的结果(很多行啊,Win10就是这样,OneDrive和库都加进了资源管理器,都符合条件,但OneDrive的类在这个项这里多出很多,而库却很“单纯”仅有俩值):


C:\WINDOWS\system32>reg query "HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}"

HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}
    (Default)    REG_SZ    OneDrive
    System.IsPinnedToNameSpaceTree    REG_DWORD    0x1
    SortOrderIndex    REG_DWORD    0x42

HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}\DefaultIcon
HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}\InProcServer32
HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}\Instance
HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}\ShellFolder

C:\WINDOWS\system32>reg query "HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{031E4825-7B94-4dc3-B131-E946B44C8DD5}"

HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{031E4825-7B94-4dc3-B131-E946B44C8DD5}
    System.IsPinnedToNameSpaceTree    REG_DWORD    0x0


C:\WINDOWS\system32>
 楼主| 发表于 2016-10-21 21:04:41 | 显示全部楼层
本帖最后由 huyou96 于 2016-10-21 21:09 编辑

附加说明一下,我要筛出该键不是用于骇客做坏事的。

看一下这个键值有什么用处就知道了:

HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{031E4825-7B94-4dc3-B131-E946B44C8DD5}键下含有如下键值:

值    System.IsPinnedToNameSpaceTree
类型  REG_DWORD
数据  0=文件资源管理器导航窗格不显示库,1=文件资源管理器导航窗格显示库
默认  0x0(即系统默认情形下文件资源管理器导航窗格不显示库,但似乎系统有bug,我这里左侧导航窗仍显示了“库”)
发表于 2016-10-21 21:13:49 | 显示全部楼层
本帖最后由 aa77dd@163.com 于 2016-10-21 22:04 编辑

回复 4# huyou96

下面代码中筛选规则不是很严谨的, 但没有人为设置特别的情况, 应该是可用的
  1. @echo off & setlocal enableDelayedExpansion
  2. chcp 437
  3. mode 200

  4. for /f delims^= %%a in (^
  5. 'reg query HKCU\SOFTWARE\Classes\CLSID /s /v "System.IsPinnedToNameSpaceTree" ^
  6. | findstr /r /i /c:"HKEY_CURRENT_USER\\SOFTWARE\\Classes\\CLSID\\{........-....-....-....-............}"'
  7. ) do (

  8.    >nul  (reg query "%%a" | findstr /v /r "^$" | findstr /v "System.IsPinnedToNameSpaceTree HKEY_CURRENT_USER") && echo;exclude || (

  9.         >nul (reg query "%%a" /ve | find /i "(Default)    REG_SZ    (value not set)") && (
  10.             for /f tokens^=1-5delims^=\ %%A in ("%%a") do (
  11.                 set "key=%%A\%%B\%%C\%%D\%%E"
  12.                 echo;key=!key!
  13.             )
  14.         )

  15.     )
  16. )

  17. pause

  18. exit /b
复制代码

评分

参与人数 1技术 +1 收起 理由
huyou96 + 1 非常牛!非常棒!第10行照着九楼更改后就完 ...

查看全部评分

 楼主| 发表于 2016-10-21 21:46:32 | 显示全部楼层
大虾你好!我运行了一下,结果如下:

exclude
exclude
Press any key to continue . . .

C:\WINDOWS\system32>

是否  (echo;exclude) 这个没写全?“exclude” 在哪儿?
发表于 2016-10-21 22:02:19 | 显示全部楼层
回复 7# huyou96

确实有问题

因为没有过滤空行, 我改了, 并且又测试了下
 楼主| 发表于 2016-10-21 22:17:53 | 显示全部楼层
本帖最后由 huyou96 于 2016-10-21 22:19 编辑
回复  huyou96

确实有问题

因为没有过滤空行, 我改了, 并且又测试了下
aa77dd@163.com 发表于 2016-10-21 22:02



这次我这里跑的结果如下:

exclude
key=HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{031E4825-7B94-4dc3-B131-E946B44C8DD5}
Press any key to continue . . .

C:\WINDOWS\system32>

看到HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{031E4825-7B94-4dc3-B131-E946B44C8DD5}啦,但还有多余的一行
发表于 2016-10-21 22:32:40 | 显示全部楼层
回复 9# huyou96

第 10 行改成
  1. >nul  (reg query "%%a" | findstr /v /r "^$" | findstr /v "System.IsPinnedToNameSpaceTree HKEY_CURRENT_USER")  || (
复制代码

评分

参与人数 1技术 +1 收起 理由
huyou96 + 1 谢谢!改得好,好棒!

查看全部评分

 楼主| 发表于 2016-10-21 22:47:57 | 显示全部楼层
回复  huyou96

第 10 行改成
aa77dd@163.com 发表于 2016-10-21 22:32


OK! 这次行了,第十行改了后,结果如下:

key=HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{031E4825-7B94-4dc3-B131-E946B44C8DD5}
Press any key to continue . . .

C:\WINDOWS\system32>

谢谢大虾!非常感谢!真是牛啊。祝晚安!

评分

参与人数 1PB -3 收起 理由
pcl_test -3 指定回应某楼层的在相应楼层点回复,少引用

查看全部评分

 楼主| 发表于 2016-10-21 23:18:31 | 显示全部楼层
回复 11# huyou96

一时不当心就“引用”了,该处是该“回复的。谢谢版主!
发表于 2016-10-22 16:55:01 | 显示全部楼层
本帖最后由 WHY 于 2016-10-23 11:17 编辑

PowerShell
  1. $key = dir 'HKCU:\Software\Classes\CLSID';
  2. ForEach ($subkey In $key) {
  3.     $item = get-ItemProperty Registry::$($subkey.Name);
  4.     if($item.'(Default)' -eq '' -or $item.'(Default)' -eq $null -and $item.'System.IsPinnedToNameSpaceTree' -ne $null) {
  5.         $subkey.Name
  6.     }
  7. }
复制代码
搞错了,'System.IsPinnedToNameSpaceTree' 是注册表值,不是注册表数据
 楼主| 发表于 2016-10-22 17:16:51 | 显示全部楼层
本帖最后由 huyou96 于 2016-10-22 17:18 编辑

回复 13# WHY

讃!谢!(我弹尽粮绝了,级别也太低,没法评分了,否则会给予评分的……)
哈哈哈,还是PS强大啊,比起批处理来看似更简易好懂,实现起来也看似更容易。

对版主说的话:
请版主不要删楼上啊,虽然这位大虾贴错了论坛,但代码非常漂亮,具有启发啊。
殊途同归,无论PowerShell脚本还是批处理脚本无论黑猫白猫只要能达到目的就是好猫!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:29 , Processed in 0.025723 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表