向大家请教一个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秒内直接卡死机,让我感到非常困惑。
在网上稍加搜索后并没有看到类似的案例,而且这个循环本身好像也是正常的。希望有大佬能够为我解惑。 没有人嘛 我有个思路:
可以考虑将 reg query "%regpath% 的结果先存入临时文件,然后利用 for /F 循环处理那个临时文件中的子项目。
只能先试一试{:1_918:}
{:301_1001:} 来,接着完善一下:
@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 TanXin 发表于 2023-3-18 00:09
我有个思路:
可以考虑将 reg query "%regpath% 的结果先存入临时文件,然后利用 for /F 循环处理那个临 ...
谢谢!我试一下! TanXin 发表于 2023-3-18 00:17
来,接着完善一下:
@echo off
确实先把路径都存文件里就可以了{:1_909:}老哥牛逼。之前那个不知道为什么直接循环就会卡死。
页:
[1]