【问题标题】:Batch File to Add Multiple Values if Condition True条件为真时添加多个值的批处理文件
【发布时间】:2017-01-04 20:10:48
【问题描述】:

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

键:

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
)

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

【问题讨论】:

    标签: loops batch-file cmd registry


    【解决方案1】:

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

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

    【讨论】:

    • 你自己和@Magoo 的答案都很好,但是我选择了这个答案作为最佳答案,因为如果我需要,它允许我在超过 3 个上运行它,而不必全部定义它们。
    【解决方案2】:
    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

    【讨论】:

      猜你喜欢
      • 2011-08-28
      • 1970-01-01
      • 2012-12-18
      • 2023-04-05
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      相关资源
      最近更新 更多