批处理文件,用于删除注册表中键中的多个值

时间:2011-04-14 08:18:41

标签: for-loop batch-file registry

以下键有多个值,如“查找”,“查找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,则终止循环。 我不知道该怎么做。

1 个答案:

答案 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