AnonHedgehog 发表于 2023-3-16 21:37

向大家请教一个Batch脚本的问题

如题,电脑上有些软件存在卸载后注册表没有删干净,导致非常多文件后缀都还与软件存在着关联。
有一个办法就是在注册表HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts路径下,
将所有拓展名(如下图所示)内的注册表项内的一个key给删除。

当然因为存在的子项目太多了不想手动删,就尝试写了一个batch脚本,但遇到了一点问题。
首先在cmd或者powershell内直接输入reg query HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts
能够极快的返回所有的子项目路径,这个是没问题的,但到了脚本里就出现问题了。
首先尝试用循环处理所有子项目:
set "regpath=HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts"

for /f "tokens=*" %%a in ('reg query "%regpath%"') do (
    ::删除key

但是问题在于这个循环会不断创建新的handle,最后直接卡爆,而且Ctrl-C还中止不了。
一旦运行这个脚本,循环内部什么都不干都能够在2秒内直接卡死机,让我感到非常困惑。
在网上稍加搜索后并没有看到类似的案例,而且这个循环本身好像也是正常的。希望有大佬能够为我解惑。

AnonHedgehog 发表于 2023-3-17 22:46

没有人嘛

TanXin 发表于 2023-3-18 00:09

我有个思路:

可以考虑将 reg query "%regpath% 的结果先存入临时文件,然后利用 for /F 循环处理那个临时文件中的子项目。

只能先试一试{:1_918:}

{:301_1001:}

TanXin 发表于 2023-3-18 00:17

来,接着完善一下:

@echo off

reg query HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts > temp.tmp

for /F "tokens=*" %%i in (temp.tmp) do (
        ::删除key
        echo - %%i
)
pause

AnonHedgehog 发表于 2023-3-18 17:13

TanXin 发表于 2023-3-18 00:09
我有个思路:

可以考虑将 reg query "%regpath% 的结果先存入临时文件,然后利用 for /F 循环处理那个临 ...

谢谢!我试一下!

AnonHedgehog 发表于 2023-3-18 17:21

TanXin 发表于 2023-3-18 00:17
来,接着完善一下:

@echo off


确实先把路径都存文件里就可以了{:1_909:}老哥牛逼。之前那个不知道为什么直接循环就会卡死。
页: [1]
查看完整版本: 向大家请教一个Batch脚本的问题