我正在寻找一种快速简便的方法(我不需要任何错误检查),通过打开批处理文件在两个reg文件之间切换。
如果用户运行批处理文件,批处理文件应将reg文件A合并到注册表。如果用户再次运行它,批处理文件应该将reg文件B合并到注册表。如果用户再次运行它,则合并文件A ......你明白了。
总的来说,我认为有两种方法可以做到这一点:
目前,我正在这样做:
REG QUERY "KeyName" /v "ValueName" | Find "x"
IF ERRORLEVEL 1 regedit /S file1.reg
IF ERRORLEVEL 0 regedit /S file2.reg
REG QUERY部分似乎有效,但在IF ERRORLEVEL
语句中出现问题。但也许我应该完全使用不同的方法。
希望得到一些建议..提前致谢!
修改
很抱歉有点模糊:我认为以前的解决方案不起作用,因为当第一个IF
正确时,第二个IF
也会在第一个IF
之后的命令。因此,我需要一个IF ELSE
语句来阻止运行第二个IF
。
我现在想出了这个解决方案,它起作用了:
REG QUERY "KeyName" /v "ValueName" | Find "x
IF ERRORLEVEL 1 (REGEDIT /S "file1.reg") ELSE REGEDIT /S "file2.reg"
我也想知道:在批处理文件中添加注册表项/值而不是使用单独的.reg文件会有所改进吗?值类型为REG_BINARY和REG_DWORD。
答案 0 :(得分:1)
我会试试这个:
REG QUERY "KeyName" /v "ValueName" | Find "x"
IF ERRORLEVEL 1 (
regedit /S file1.reg
goto :EOF
)
regedit /S file2.reg
当ERRORLEVEL等于或大于ERRORLEVEL编号时,IF条件设置为TRUE(参见此处:http://support.microsoft.com/kb/39585/en-us),因此第二个IF条件总是被评估为真。
答案 1 :(得分:1)
您可以将值存储在环境变量
中@Echo OFF
:: By Elektro H@cker
Set | FIND "Merged" >NUL && Regedit /S "File_B.reg" || Regedit /S "File_A.reg" && SETX Merged YES >NUL
Pause&Exit
这是相同的代码,但缩进并快速解释:
@Echo OFF
:: By Elektro H@cker
REM If it's batfile first launch then I add a value "YES" to a variable and then only merges the File A.
REM If isn't batfile first launch then only merges FILE B
Set | FIND "Merged" >NUL && (
Regedit /S "File_B.reg"
) || Regedit /S "File_A.reg" && (
SETX Merged YES >NUL
)
Pause&Exit