我想查询注册表中的值,如果值存在我想修改它,如果它不存在我想转到下一个相似的键并检查。
键:
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
)
这将遍历我需要检查和修改每个键的所有键,但它会退出几行,我想也许我可以构建一个类型的子程序来实现这一点,但我有点难过。
答案 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
)
使用的&&
运算符只有在前一个命令成功时才执行以下命令。