以下键有多个值,如“查找”,“查找0”,“查找1”,“查找2”等。 HKCU \软件\微软\ VisualStudio的\ 9.0 \查找
值随着使用而增加,我对最大数量没有先验知识。 目标是创建一个批处理文件,以便在不事先知道最大值的情况下删除所有“Find *”值。
我尝试了以下最大数量= 10:
@ECHO OFF
FOR /L %%G IN (0,1,10) DO REG DELETE HKCU\Software\Microsoft\VisualStudio\9.0\Find /v "Find %%G" /f
PAUSE
如果我对它没有任何想法,我如何循环到最大数字?
我可以把100这样的大数字用来循环。但那将是不必要的循环。
点子:
达到最大数量后,它会在控制台中抛出错误
"Error: The system was unable to find the specified registry key or value"
我想在变量中捕获它并检查字符串“Error ....”,如果为true,则终止循环。 我不知道该怎么做。
答案 0 :(得分:1)
您需要使用WHILE循环替换FOR循环。
当然,在批处理脚本中没有“WHILE循环”这样的东西。它通常用IF和GOTO模拟。
以下是一个示例脚本:
@ECHO OFF
SET G=-1
SET Err=0
:loop
SET /A G+=1
REG DELETE HKCU\Software\Microsoft\VisualStudio\9.0\Find /v "Find %G%" /f || SET Err=1
IF %Err% == 0 GOTO loop
PAUSE
如您所见,错误是在||
运算符的帮助下捕获的。 ||
之后的命令仅在||
之前的命令导致错误时执行。因此,当脚本成功删除值时,Err
变量保持不变,即等于0,因此后续IF总是计算为TRUE并相应地执行GOTO。
一旦尝试删除另一个值时出现错误,就会执行SET Err=1
命令,因此我们将退出循环。
编辑以获取更改请求。
要考虑Find
参数(名称后面没有数字和空格),您必须采取不同的行动,可能是这样的:
@ECHO OFF
SET G=-1
SET Err=0
:loop
IF %G% == -1 (SET ParamName="Find") ELSE (SET ParamName="Find %G%")
REG DELETE HKCU\Software\Microsoft\VisualStudio\9.0\Find /v %ParamName% /f || SET Err=1
IF %Err% == 0 (SET /A G+=1 & GOTO loop)
PAUSE