[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[注册表类] [已解决]批处理如何删除注册表中指定主键下没有值和数据的子项

本帖最后由 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):

请帮个忙谢谢了
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 1# qxlovexcx


    用系统自带的注册表命令行工具reg,在for /f 中循环
查询“REG QUERY”,如果无值,就删除“REG DELETE”;
这个你应该一下子就可以搞定!

TOP

就是不知道怎么去搜索代表无值的问题

TOP

回复 2# CommandBatCmd


   不知道怎么判断有值和没值,在返回删除主项

TOP

回复 4# qxlovexcx
  1. REG QUERY "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.扩展名\OpenWithList" /v "MRUList" >nul 2>nul
  2. REG QUERY "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.扩展名\OpenWithProgids" /s >nul 2>nul
复制代码
查询以上两条注册表信息,如果两个【同时】返回错误代码“%errorlevel%”都不为0,则删除:
  1. REG DELETE "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.扩展名" /f
复制代码
如果其中有一条返回成功代码,都不要删除。
操作前先备份注册表!

TOP

试试看,没问题的话用你想要的命令替换掉echo部分
  1. @echo off
  2. for /f "delims=" %%a in ('reg query HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts') do (
  3.   reg query %%a /s |findstr "REG" >nul &&echo.%%a有键值>>result.txt||echo.%%a没键值>>result.txt
  4. )
复制代码

TOP

TOP

这个用 PowerShell 可能比较合适,与删除文件系统空目录相同,需要考虑从内向外倒序删除
  1. $key = Get-ChildItem -Recurse 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts';
  2. For ($i=$key.Length-1; $i -ge 0; $i--) {
  3.     if($key[$i].ValueCount -eq 0 -and $key[$i].SubkeyCount -eq 0){ Remove-Item $key[$i].PSPath -Recurse }
  4. }
复制代码
1

评分人数

TOP

早上到公司打开网址就看到大家的帮忙非常感谢!

版主说的也没错,其实我都明白

11年后我就没有再动过一次批处理,之后一直在玩游戏,现在已经是基本全忘记了,就只有思路了,要实现时

动手写一个代码,经常都是把全部要用到的命令的帮助文件全打开看,知道怎么回事就是那点细节搞不定,现在基本都是用以前我收藏的例题复制黏贴在根据需要修改,这样简单点,

要不有时一个命令的名称都会打错字符,搞了我几次到最后才发现打错了字符哈哈,

让各位见笑了,我应该是比小白还小白吧,年纪又大了点反应慢半拍,以前基本都不注册论坛账号也不问问题的,都是自己解决。现在真没那个耐心了,就求求大家了,谢谢了

搞定这个,我的工作就做完一大半了,后面的基本就重我以前做的xp里的移植过来可以了,到时发上来让大家指导下
最后谢谢大家的帮忙,我来式式,昨天我用
1、导出注册表
2、搜索文件
    存在和不存在的方法没搞定

TOP

回复 5# CommandBatCmd


    谢谢你的帮助。用了下面的代码更简单

TOP

回复 6# flyinnet9


    谢谢,代码简洁有效果,正是我追求的。

TOP

返回列表