标题: [注册表类] [已解决]批处理如何删除注册表中指定主键下没有值和数据的子项 [打印本页]
作者: qxlovexcx 时间: 2016-11-28 09:20 标题: [已解决]批处理如何删除注册表中指定主键下没有值和数据的子项
本帖最后由 qxlovexcx 于 2016-11-29 09:58 编辑
批处理搜索出子项下没有任何数据的就返回删除主项,有数据的跳过
下面的注册表为用过的历史文件扩展名有些已经失效,失效的项下和子项都没有数据,没有失效的,多多少少会有点数据,我想用批处理搜索出子项下没有任何数据的就返回删除主项,有数据的跳过
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts]
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.]
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.\OpenWithList]
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.1sdb]
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.1sdb\OpenWithList]
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.3fr]
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.3fr\OpenWithList]
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.3fr\OpenWithProgids]
"2345Pic.3fr"=hex(0):
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.3fr\UserChoice]
"Hash"="hzTm7/WKXh8="
"ProgId"="2345Pic.3fr"
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.3g2]
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.3g2\OpenWithList]
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.3g2\OpenWithProgids]
"WMP11.AssocFile.3G2"=hex(0):
请帮个忙谢谢了
作者: CommandBatCmd 时间: 2016-11-28 14:57
回复 1# qxlovexcx
用系统自带的注册表命令行工具reg,在for /f 中循环
查询“REG QUERY”,如果无值,就删除“REG DELETE”;
这个你应该一下子就可以搞定!
作者: qxlovexcx 时间: 2016-11-28 16:01
就是不知道怎么去搜索代表无值的问题
作者: qxlovexcx 时间: 2016-11-28 16:02
回复 2# CommandBatCmd
不知道怎么判断有值和没值,在返回删除主项
作者: CommandBatCmd 时间: 2016-11-28 16:42
回复 4# qxlovexcx - REG QUERY "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.扩展名\OpenWithList" /v "MRUList" >nul 2>nul
- REG QUERY "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.扩展名\OpenWithProgids" /s >nul 2>nul
复制代码
查询以上两条注册表信息,如果两个【同时】返回错误代码“%errorlevel%”都不为0,则删除:- REG DELETE "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.扩展名" /f
复制代码
如果其中有一条返回成功代码,都不要删除。
操作前先备份注册表!
作者: flyinnet9 时间: 2016-11-28 16:48
试试看,没问题的话用你想要的命令替换掉echo部分- @echo off
- for /f "delims=" %%a in ('reg query HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts') do (
- reg query %%a /s |findstr "REG" >nul &&echo.%%a有键值>>result.txt||echo.%%a没键值>>result.txt
- )
复制代码
作者: pcl_test 时间: 2016-11-28 18:35
回复 3# qxlovexcx
代码只是用来实现思路的工具,自己首先要观察输出中的异同、总结规律,找到有值和无值的区别所在
http://www.bathome.net/viewthread.php?tid=14001
http://www.bathome.net/thread-2189-1-1.html
http://bbs.bathome.net/thread-31727-1-1.html
http://www.bathome.net/thread-5814-1-1.html
http://www.bathome.net/viewthread.php?tid=2530
http://www.bathome.net/viewthread.php?tid=14682
http://www.bathome.net/thread-75-1-1.html
作者: WHY 时间: 2016-11-28 23:06
这个用 PowerShell 可能比较合适,与删除文件系统空目录相同,需要考虑从内向外倒序删除- $key = Get-ChildItem -Recurse 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts';
- For ($i=$key.Length-1; $i -ge 0; $i--) {
- if($key[$i].ValueCount -eq 0 -and $key[$i].SubkeyCount -eq 0){ Remove-Item $key[$i].PSPath -Recurse }
- }
复制代码
作者: qxlovexcx 时间: 2016-11-29 08:55
早上到公司打开网址就看到大家的帮忙非常感谢!
版主说的也没错,其实我都明白
11年后我就没有再动过一次批处理,之后一直在玩游戏,现在已经是基本全忘记了,就只有思路了,要实现时
动手写一个代码,经常都是把全部要用到的命令的帮助文件全打开看,知道怎么回事就是那点细节搞不定,现在基本都是用以前我收藏的例题复制黏贴在根据需要修改,这样简单点,
要不有时一个命令的名称都会打错字符,搞了我几次到最后才发现打错了字符哈哈,
让各位见笑了,我应该是比小白还小白吧,年纪又大了点反应慢半拍,以前基本都不注册论坛账号也不问问题的,都是自己解决。现在真没那个耐心了,就求求大家了,谢谢了
搞定这个,我的工作就做完一大半了,后面的基本就重我以前做的xp里的移植过来可以了,到时发上来让大家指导下
最后谢谢大家的帮忙,我来式式,昨天我用
1、导出注册表
2、搜索文件
存在和不存在的方法没搞定
作者: qxlovexcx 时间: 2016-11-29 09:34
回复 5# CommandBatCmd
谢谢你的帮助。用了下面的代码更简单
作者: qxlovexcx 时间: 2016-11-29 09:37
回复 6# flyinnet9
谢谢,代码简洁有效果,正是我追求的。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |