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

问题描述:

以下键具有多个值,如“查找”,“查找0”,查找1“,”查找2“等。 \ 9.0 \查找批处理文件删除注册表中某个键中的多个值

值与使用增加,我有最大数量的先验知识。 目标是不知道的最大值事先创建一个批处理文件来删除所有的“查找*”的价值观。

我尝试了以下最大数量= 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" 

我想捕捉这一个变量,并检查字符串“错误... 。“,如果为true,则终止循环。 我不知道如何做到这一点。

您需要用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命令,因此我们将退出循环。


EDIT的变更请求。

要占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 
+0

这是完美的。非常感谢Andriy。 – ontherocks 2011-04-18 06:14:42

+0

我有几个问题 1.“||之后的命令只有在||之前的命令导致错误时才会执行。”这种说法对任何控制台命令中的所有错误都是真实的吗我很困惑,因为“REG DELETE”命令没有返回值。 2.还有一个值“查找”,它没有任何尾随号码。我将如何删除使用相同的goto循环? – ontherocks 2011-04-18 06:17:09

+0

@ontherocks:1.它与所谓的退出代码*有关,它由任何应用程序返回。它不显示,但可以使用'IF ERRORLEVEL'指令进行检查,2)通过读取'ERRORLEVEL'环境变量,或者3)在'&&'和'||'运算符的帮助下进行检查。你可以阅读更多关于它[这里](http://www.robvanderwoude.com/errorlevel.php)。 2.我添加了一个修改后的解决方案,但通常你应该发布一个新问题。 (虽然你的要求与你最初的问题密切相关,但它会改变我原来的方法。)请记住未来。 – 2011-04-18 07:11:51