在两个.reg文件之间切换

时间:2012-11-27 22:37:53

标签: batch-file errorlevel

我正在寻找一种快速简便的方法(我不需要任何错误检查),通过打开批处理文件在两个reg文件之间切换。

如果用户运行批处理文件,批处理文件应将reg文件A合并到注册表。如果用户再次运行它,批处理文件应该将reg文件B合并到注册表。如果用户再次运行它,则合并文件A ......你明白了。

总的来说,我认为有两种方法可以做到这一点:

  1. 创建某种变量来存储下一个应该运行的reg。
  2. 检查注册表项值以查看最近合并的注册表(可能是首选方法)。
  3. 目前,我正在这样做:

    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。

2 个答案:

答案 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