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

Batch File to Add Multiple Values if Condition True

我想查询注册表一个值,如果该值存在我想修改它,如果它不存在我想去下一个类似的键检查。

键:

HKCU\SOFTWARE\MySoftware[=10=]1
HKCU\SOFTWARE\MySoftware[=10=]2
HKCU\SOFTWARE\MySoftware[=10=]3

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

我目前正在做的是:

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

这将循环遍历我需要检查和修改的所有键,但它退出了几行,我在想也许我可以构建某种类型的子例程来完成此操作,但我有点难过。

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

以下代码查询注册表项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
)

使用的 && 操作符让后面的命令只有在前面的命令成功时才执行。