7

Windows マシンでのビルド セットアップの一環として、レジストリ エントリを追加する必要があり、単純なバッチ ファイルから実行したいと考えています。

エントリはサード パーティのアプリ用であるため、形式は固定されています。

エントリは REG_SZ 文字列の形式を取りますが、改行を含める必要があります。セパレータとしての 0xOA 文字。

私はいくつかの問題にぶつかりました。

最初の試行では、regedit を使用して、生成された .reg ファイルをロードしました。これは、長い文字列または改行を含む文字列のいずれかを好まないように見えたため、失敗しました。エクスポートが正常に機能し、インポートが失敗することがわかりました。サードパーティのアプリが win32 API を介して同様のエントリを直接追加するため、エクスポートをテストできました。

2回目の試行ではコマンドREG ADDを使用しましたが、改行文字を追加する方法を見つけることができません。試してみると、リテラル文字列が追加されてしまいます。

4

3 に答える 3

3

スクリプト言語に制約されていない場合は、C# で実行できます。

Registry.CurrentUser.OpenSubKey(@"software\classes\something", true).SetValue("some key", "sometext\nothertext", RegistryValueKind.String);
于 2008-09-30T17:18:04.880 に答える
3

テキストを UTF-16LE 16 進エンコード データとして変換することを気にしない限り、キャリッジ リターン (CR) とラインフィード (LF) 改行 (EOL) を含む複数行の REG_SZ 文字列を .reg ファイルを使用してレジストリにインポートできます。 . このテキストを含む REG_SZ をインポートするには:

1行目
2行目

これを含む MULTILINETEXT.REG というファイルを作成できます。

Windows レジストリ エディタ バージョン 5.00

[HKEY_CURRENT_USER\環境]
"MULTILINETEXT"=hex(1):31,00,73,00,74,00,20,00,4c,00,69,00,6e,00,65,00,0d,00,0a,00,\
32,00,6e,00,64,00,20,00,4c,00,69,00,6e,00,65,00,0d,00,0a,00,\
00,00

ASCII を UTF-16LE にエンコードするには、各 ASCII コード値の後にヌル バイトを追加するだけです。,00,00REG_SZ 値は、UTF-16LE 表記のヌル文字 ( ) で終了する必要があります。

レジストリの変更をバッチ ファイルにインポートしますREG.EXE IMPORT MULTILINETEXT.REG

この例では、環境変数にそのようなデータを追加することが特に有用であるという理由ではなく、便利であるため、Environment キーを使用しています。RegEdit を使用して、インポートされた REG_SZ データに CRLF 文字が含まれていることを確認できます。

于 2012-11-06T16:22:23.473 に答える
2

VBScript(.vbs) ファイルを作成し、バッチ ファイルから呼び出すことができます。これは、このレジストリの変更以外にバッチ内で他のことを行っていることを前提としています。vbscript では、次のようになります。

set WSHShell = CreateObject("WScript.Shell")  
WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SOMEKEY", "value", "type"

Google を使用して、可能な型の値を見つけることができるはずです。

于 2008-09-30T16:50:16.290 に答える