1

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

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

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

  1. 创建某种变量来存储接下来应该运行哪个 reg。
  2. 检查注册表项值以查看最近合并的注册表(可能是首选方法)。

目前,我正在这样做:

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。

4

2 回答 2

1

我会试试这个:

REG QUERY "KeyName" /v "ValueName" | Find "x"

IF ERRORLEVEL 1 (
  regedit /S file1.reg
  goto :EOF
)
regedit /S file2.reg

当 ERRORLEVEL 等于或大于 ERRORLEVEL 编号(请参见此处: http: //support.microsoft.com/kb/39585/en-us)时,IF 条件设置为 TRUE,因此第二个 IF 条件始终为评价为真。

于 2012-11-27T22:57:21.717 回答
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
于 2012-11-28T09:45:40.707 回答