如果条件为True,则批处理文件添加多个值

时间:2017-01-04 20:10:49

标签: loops batch-file cmd registry

我想查询注册表中的值,如果值存在我想修改它,如果它不存在我想转到下一个相似的键并检查。

键:

HKCU\SOFTWARE\MySoftware\001
HKCU\SOFTWARE\MySoftware\002
HKCU\SOFTWARE\MySoftware\003

每个键的值都相同,但我需要循环检查每个键,直到检查完所有键为止。

我目前正在做的是:

reg query "HKCU\SOFTWARE\MySoftware\001" /v MyValue
if %ERRORLEVEL%==0 (
     reg add "HKCU\SOFTWARE\MySoftware\001" /v MyValue /f /t REG_DWORD /d 10
) else (
     goto :KEY2
)

这将遍历我需要检查和修改每个键的所有键,但它会退出几行,我想也许我可以构建一个类型的子程序来实现这一点,但我有点难过。

2 个答案:

答案 0 :(得分:0)

for %%a in (001 002 003) do (
 reg query "HKCU\SOFTWARE\MySoftware\%%a" /v MyValue
 if not errorlevel 1 (
  reg add "HKCU\SOFTWARE\MySoftware\%%a" /v MyValue /f /t REG_DWORD /d 10
 )
)

应该做到这一点。 errorlevel以其传统方式解释其运行时值。您所需要做的就是修改括号中的列表,其中的每个值依次分配给metavariable %%a

答案 1 :(得分:0)

以下代码查询注册表项HKEY_CURRENT_USER\SOFTWARE\MySoftware以查找所有直接子键,过滤名称由三位小数组成的子列,按升序循环显示,查询值MyValue如果找到,修改相应的数据:

for /F delims^=^ eol^= %%K in ('
    reg query "HKEY_CURRENT_USER\SOFTWARE\MySoftware" /K /F * ^
        ^| findstr "^HKEY_.*\\[0-9][0-9][0-9]$" ^| sort
') do (
    reg query "%%K" /V "MyValue" && reg add "%%K" /V "MyValue" /f /t REG_DWORD /d 10
)

使用的&&运算符只有在前一个命令成功时才执行以下命令。