1

バッチ ファイルを開いて 2 つの reg ファイルを切り替えるための、すばやく簡単な方法 (エラー チェックは必要ありません) を探しています。

ユーザーがバッチ ファイルを実行すると、バッチ ファイルは reg ファイル A をレジストリにマージする必要があります。ユーザーが再度実行すると、バッチ ファイルは reg ファイル B をレジストリにマージする必要があります。ユーザーが再度実行すると、ファイル A がマージされます...要点がわかりました。

一般的に、これを行うには2つの方法があると思います。

  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少しあいまいで申し訳ありません:最初のソリューションが正しい場合、2番目のソリューションは最初のコマンドのIF後にあまりにも後になるため、以前のソリューションは機能しなかったと思います。IFしたがってIF ELSE、2 番目の の実行を防ぐためのステートメントが必要になります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 数値以上の場合、IF 条件は TRUE に設定されます (こちらを参照してください: http://support.microsoft.com/kb/39585/en-us )。そのため、2 番目の 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 に答える