Board logo

标题: [注册表类] 批处理删除注册表内容 [打印本页]

作者: wh1234567    时间: 2021-2-22 14:41     标题: 批处理删除注册表内容

电脑点右键反应慢(鼠标右键一直转圈)的解决办法:
由于Intel显卡驱动在桌面右键的加载项造成。
解决方案:清理注册表中桌面右键加载项,点击开始,输入regedit,找到HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\,然后在ContextMenuHandlers项目下,除了New和Sharing,其他选项都删除。关闭注册表,回到桌面试试你的菜单右键是不是就OK了。
以上是手动解决的办法,能不能用批处理自动实现呢?也就是删除 除了New和Sharing 以外的项。
作者: WHY    时间: 2021-2-25 13:38

右键选择"使用管理员身份运行",先备份注册表。
  1. @echo off
  2. PowerShell "dir Registry::HKCR\Directory\Background\shellex\ContextMenuHandlers | ?{$_.Name -notmatch '\\(?:New|Sharing)$'} | rd -Recurse"
  3. pause
复制代码

作者: smss    时间: 2021-2-25 14:34

  1. for /f "delims=" %%i in ('reg query "HKCR\Directory\Background\shellex\ContextMenuHandlers" /s ^|findstr /v "New Sharing"')do reg delete "%%i" /f
复制代码

作者: WHY    时间: 2021-2-25 16:33

  1. @echo off
  2. for /f "delims=" %%i in ('reg query "HKCR\Directory\Background\shellex\ContextMenuHandlers" /k /f * ^| findstr /v "\\New$ \\Sharing$ ^[^\\]*$"') do (
  3.     echo; reg delete "%%i" /f
  4. )
  5. pause
复制代码

作者: wh123wh123    时间: 2021-2-25 17:13

本帖最后由 wh123wh123 于 2021-2-25 17:14 编辑

回复 4# WHY

@echo off
PowerShell "dir Registry::HKCR\Directory\Background\shellex\ContextMenuHandlers | ?{$_.Name -notmatch '\\(?:New|Sharing)$'} | rd -Recurse"
pause
这是备份需要删除的那2个以外的项吗?如果是,那么备份到哪里了?如何恢复?

@echo off
for /f "delims=" %%i in ('reg query "HKCR\Directory\Background\shellex\ContextMenuHandlers" /k /f * ^| findstr /v "\\New$ \\Sharing$ ^[^\\]*$"') do (
    echo; reg delete "%%i" /f
)
pause
这是删除那2个以外的项吗?
不会误删除吧?
作者: WHY    时间: 2021-2-25 17:56

回复 5# wh123wh123


    2楼的意思是,先手动运行 regedit 备份注册表,然后运行脚本。目的是避免误删。
4楼先测试,如果显示结果与你期望的一致,把脚本中的 echo;删掉,再次运行即可。
作者: wh123wh123    时间: 2021-2-25 19:39

本帖最后由 wh123wh123 于 2021-2-25 19:42 编辑

回复 6# WHY

明白意思了,如果没有回显内容【之前手工删除过】,说明不需要删除,是吧?
作者: wh123wh123    时间: 2021-2-25 19:47

回复  wh123wh123


    2楼的意思是,先手动运行 regedit 备份注册表,然后运行脚本。目的是避免误删。 ...
WHY 发表于 2021-2-25 17:56


@echo off
for /f "delims=" %%i in ('reg query "HKCR\Directory\Background\shellex\ContextMenuHandlers" /k /f * ^| findstr /v "\\New$ \\Sharing$ ^[^\\]*$"') do (
    echo; reg delete "%%i" /f
)
pause
    这是自动单纯的备份注册表吗?
作者: WHY    时间: 2021-2-25 22:08

回复 8# wh123wh123


    不是的,这个脚本没有备份功能,你需要手动备份。
脚本回显的内容是需要删除的注册表项,回显几条就需要删除几个注册表项。没有回显说明不需要删除。
举例:
C:\Users\WHY>reg query "HKCR\Directory\Background\shellex\ContextMenuHandlers" /k /f *

HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\ACE
HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\Gadgets
HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\New
HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\Sharing
搜索结束: 找到 4 匹配。

意思是 HKCR\Directory\Background\shellex\ContextMenuHandlers 这个注册表项下面共有4个子项。
运行脚本后的回显:
C:\Users\WHY>C:\Users\WHY\Desktop\test.bat
reg delete "HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\ACE" /f
reg delete "HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\Gadgets" /f
请按任意键继续. . .

意思是脚本会删除 ACE 和 Gadgets 子项。
上面仅仅是回显,让你自己确认回显结果与你期望的结果是否一致。

把脚本里面的 echo; 删掉,再次运行(以管理员身份运行)就 OK 了。
作者: wh123wh123    时间: 2021-2-25 22:29

本帖最后由 wh123wh123 于 2021-2-25 22:32 编辑

回复 9# WHY

如果一边回显一边删除子项的话,echo; reg delete "%%i" /f  这里怎么修改?因为去掉echo的话看不到是否删除成功以及删除了哪些子项
老师是一位很热心和很负责任的人,也是一个很认真做事和诚信的人,能感受得到,祝福老师前途无量,幸福安康。
作者: flashercs    时间: 2021-2-25 23:01

回复 10# wh123wh123
  1. @echo off
  2. for /f "delims=" %%i in ('reg query "HKCR\Directory\Background\shellex\ContextMenuHandlers" /k /f * ^| findstr /v "\\New$ \\Sharing$ ^[^\\]*$"') do (
  3.     echo; reg delete "%%i" /f
  4.     reg delete "%%i" /f
  5. )
  6. pause
复制代码

作者: wh123wh123    时间: 2021-2-25 23:54

本帖最后由 wh123wh123 于 2021-2-26 00:04 编辑

回复 11# flashercs

删除[子项a]成功!
删除[子项B]成功!
或者 无需要删除的项!

@echo off
for /f "delims=" %%i in ('reg query "HKCR\Directory\Background\shellex\ContextMenuHandlers" /k /f * ^| findstr /v "\\New$ \\Sharing$ ^[^\\]*$"') do (
    echo 待删除项:reg delete "%%i" /f
    reg delete "%%i" /f
    echo 删除["%%i"]成功!
)
pause
无删除项咋回显“无需要删除的项!”
作者: WHY    时间: 2021-2-26 10:13

回复 12# wh123wh123
  1. @echo off
  2. for /f "delims=" %%i in ('reg query "HKCR\Directory\Background\shellex\ContextMenuHandlers" /k /f * ^| findstr /b "HKEY"') do (
  3.     if /i "%%~nxi" == "Sharing" (
  4.         echo;[Sharing]子项不需要删除
  5.     ) else if /i "%%~nxi" == "New" (
  6.         echo;[New]子项不需要删除
  7.     ) else (
  8.         reg delete "%%i" /f >nul 2>&1 && echo;[%%~nxi]子项删除成功 || echo;[%%~nxi]子项删除失败
  9.     )
  10. )
  11. pause
复制代码

作者: wh123wh123    时间: 2021-2-26 11:31

回复 13# WHY

感谢老师认真负责的热心帮助,祝福老师前途无限好......  评分超出限制。




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