标题: [注册表类] [已解]如何将注册表中查到符合指定条件的注册表键路径赋给变量? [打印本页]
作者: huyou96 时间: 2016-10-21 19:21 标题: [已解]如何将注册表中查到符合指定条件的注册表键路径赋给变量?
本帖最后由 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}形式的字符串值
赋给一个变量?
作者: huyou96 时间: 2016-10-21 19:22
新手求教:
"HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID"的所有子项中
俩条件:
1. 既默认值为空(默认值未设置)
2. 又含有“System.IsPinnedToNameSpaceTree”值
符合条件的查询结果的注册表路径,即HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}形式的字符串值,赋给变量并echo显示出来,这个批处理怎么写?
作者: aa77dd@163.com 时间: 2016-10-21 20:20
本帖最后由 aa77dd@163.com 于 2016-10-21 20:36 编辑
回复 2# huyou96
测试于 WIN7 64BIT, 在 HKLM 下能找到如此条件的结果, 在 HKCU 下未找到结果, 代码中还是改成了 HKCU (HKEY_CURRENT_USER) 给你- @echo off & setlocal enableDelayedExpansion
- chcp 437
- mode 200
-
- for /f delims^= %%a in (^
- 'reg query HKCU\SOFTWARE\Classes\CLSID /s /v "System.IsPinnedToNameSpaceTree" ^
- | findstr /r /i /c:"HKEY_CURRENT_USER\\SOFTWARE\\Classes\\CLSID\\{........-....-....-....-............}"'
- ) do (
-
- >nul (reg query "%%a" /ve | find /i "(Default) REG_SZ (value not set)") && (
- for /f tokens^=1-5delims^=\ %%A in ("%%a") do (
- set "key=%%A\%%B\%%C\%%D\%%E"
- echo;key=!key!
- )
- )
- )
-
- pause
-
- exit /b
复制代码
作者: huyou96 时间: 2016-10-21 20:43
本帖最后由 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>
作者: huyou96 时间: 2016-10-21 21:04
本帖最后由 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,我这里左侧导航窗仍显示了“库”)
作者: aa77dd@163.com 时间: 2016-10-21 21:13
本帖最后由 aa77dd@163.com 于 2016-10-21 22:04 编辑
回复 4# huyou96
下面代码中筛选规则不是很严谨的, 但没有人为设置特别的情况, 应该是可用的- @echo off & setlocal enableDelayedExpansion
- chcp 437
- mode 200
-
- for /f delims^= %%a in (^
- 'reg query HKCU\SOFTWARE\Classes\CLSID /s /v "System.IsPinnedToNameSpaceTree" ^
- | findstr /r /i /c:"HKEY_CURRENT_USER\\SOFTWARE\\Classes\\CLSID\\{........-....-....-....-............}"'
- ) do (
-
- >nul (reg query "%%a" | findstr /v /r "^$" | findstr /v "System.IsPinnedToNameSpaceTree HKEY_CURRENT_USER") && echo;exclude || (
-
- >nul (reg query "%%a" /ve | find /i "(Default) REG_SZ (value not set)") && (
- for /f tokens^=1-5delims^=\ %%A in ("%%a") do (
- set "key=%%A\%%B\%%C\%%D\%%E"
- echo;key=!key!
- )
- )
-
- )
- )
-
- pause
-
- exit /b
复制代码
作者: huyou96 时间: 2016-10-21 21:46
大虾你好!我运行了一下,结果如下:
exclude
exclude
Press any key to continue . . .
C:\WINDOWS\system32>
是否 (echo;exclude) 这个没写全?“exclude” 在哪儿?
作者: aa77dd@163.com 时间: 2016-10-21 22:02
回复 7# huyou96
确实有问题
因为没有过滤空行, 我改了, 并且又测试了下
作者: huyou96 时间: 2016-10-21 22:17
本帖最后由 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}啦,但还有多余的一行
作者: aa77dd@163.com 时间: 2016-10-21 22:32
回复 9# huyou96
第 10 行改成- >nul (reg query "%%a" | findstr /v /r "^$" | findstr /v "System.IsPinnedToNameSpaceTree HKEY_CURRENT_USER") || (
复制代码
作者: huyou96 时间: 2016-10-21 22:47
回复 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>
谢谢大虾!非常感谢!真是牛啊。祝晚安!
作者: huyou96 时间: 2016-10-21 23:18
回复 11# huyou96
一时不当心就“引用”了,该处是该“回复的。谢谢版主!
作者: WHY 时间: 2016-10-22 16:55
本帖最后由 WHY 于 2016-10-23 11:17 编辑
PowerShell- $key = dir 'HKCU:\Software\Classes\CLSID';
- ForEach ($subkey In $key) {
- $item = get-ItemProperty Registry::$($subkey.Name);
- if($item.'(Default)' -eq '' -or $item.'(Default)' -eq $null -and $item.'System.IsPinnedToNameSpaceTree' -ne $null) {
- $subkey.Name
- }
- }
复制代码
搞错了,'System.IsPinnedToNameSpaceTree' 是注册表值,不是注册表数据
作者: huyou96 时间: 2016-10-22 17:16
本帖最后由 huyou96 于 2016-10-22 17:18 编辑
回复 13# WHY
讃!谢!(我弹尽粮绝了,级别也太低,没法评分了,否则会给予评分的……)
哈哈哈,还是PS强大啊,比起批处理来看似更简易好懂,实现起来也看似更容易。
对版主说的话:
请版主不要删楼上啊,虽然这位大虾贴错了论坛,但代码非常漂亮,具有启发啊。
殊途同归,无论PowerShell脚本还是批处理脚本无论黑猫白猫只要能达到目的就是好猫!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |