Batch file 使用Reg.exe搜索数据值并删除父项

Batch file 使用Reg.exe搜索数据值并删除父项,batch-file,Batch File,我目前正在尝试使用reg查询命令在HKCU\Software\random characters中随机名称的值中查找数据值“teststring”。我希望脚本找到teststring值,然后删除父项HKCU\Software\random字符。我已经尝试了各种脚本编写方法,这是我迄今为止所做的,但是我一直遇到语法错误,无法让reg query找到我需要的: @echo off setlocal enabledelayedexpansion set Key="HKCU\Software" set

我目前正在尝试使用reg查询命令在HKCU\Software\random characters中随机名称的值中查找数据值“teststring”。我希望脚本找到teststring值,然后删除父项HKCU\Software\random字符。我已经尝试了各种脚本编写方法,这是我迄今为止所做的,但是我一直遇到语法错误,无法让reg query找到我需要的:

@echo off
setlocal enabledelayedexpansion
set Key="HKCU\Software"
set STRING="teststring"
for /f "delims=" %%a in ('reg.exe query "%Key%" /f "%STRING%" /d /s') do (
call :GetValueName Value "%%a"
ECHO reg.exe delete "%Key%" /v "!Value!" /f
)   

goto :eof
:GetValueName
set Return=
for %%a in (%~2) do (
if "%%a"=="REG_SZ" (
    set %1=!Return:~1!&goto :eof
) else (
    set Return=!Return! %%a
)
)
:eof

这里有一个更简单的方法。 在您对显示内容感到满意后,移除回显(而不是回显)

@echo off
set "Key=HKCU\Software"
set "STRING=teststring"
for /f "delims=" %%a in ('reg query "%Key%" /v test /s /d /f "%STRING%" /t REG_SZ') do (
   echo %%a | findstr /v "REG_SZ" | findstr /v /c:"End of search:" >nul && ECHO reg.exe delete "%%a" /f
)
pause

你得到了什么错误?无效的语法,不管我对REG查询的语法做了多少更改。我认为@NobodyNada想要的是确切的错误消息。此外,调试批处理文件的一般提示是在调试时从文件顶部删除
@echo off
。如果错误在批处理中,则该行将阻止它显示。已删除@echo,并且在循环“for/F”等之后脚本不会继续。打开echo应该会显示一些错误。1.您引用了两次变量,一次在定义中,一次在用法中。2.子例程末尾没有GOTO:eof,因此它永远不会返回。但无论如何,它还有很多其他问题。谢谢!我所拥有的肯定有很多错误,从好的例子中学习是很好的,我只是找不到任何错误。另外,我对/v测试的看法是错误的,值名实际上是随机的。我删除了“test”,现在只有/v而没有值名,它可以完美地工作。我可能做错了,但如果没有/v,它就坏了。再次感谢!