コマンドラインからレジストリに複数行のREG_SZ文字列を追加するにはどうすればよいですか?
-
03-07-2019 - |
質問
Windowsマシンでのビルドセットアップの一部として、レジストリエントリを追加する必要があり、単純なバッチファイルからそれを行いたいです。
エントリはサードパーティのアプリ用であるため、形式は修正されています。
エントリはREG_SZ文字列の形式を取りますが、改行を含める必要があります。セパレータとしての0xOA文字。
いくつかの問題が発生しました。
最初に、regeditを使用して、生成された.regファイルをロードしました。これは、長い文字列または改行付きの文字列のいずれかを好まないように思われたため失敗しました。エクスポートが正常に機能し、インポートが失敗することを発見しました。サードパーティのアプリがwin32 APIを介して同様のエントリを直接追加するため、エクスポートをテストできました。
2回目の試行ではREG ADDコマンドを使用しましたが、改行文字を追加する方法を見つけることができませんでした。試しただけでリテラル文字列が追加されてしまいました。
解決
VBScript(.vbs)ファイルを作成し、バッチファイルから呼び出すだけで、このレジストリ変更以外のことをバッチで実行していると想定できます。 vbscriptでは、次のようなものが表示されます。
set WSHShell = CreateObject("WScript.Shell")
WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SOMEKEY", "value", "type"
Googleを使用して、可能なタイプ値を見つけることができるはずです。
他のヒント
スクリプト言語に制約されていない場合は、C#で次のように実行できます
Registry.CurrentUser.OpenSubKey(@"software\classes\something", true).SetValue("some key", "sometext\nothertext", RegistryValueKind.String);
テキストをUTF-16LEとして翻訳することを気にしない限り、キャリッジリターン(CR)およびラインフィード(LF)の行末(EOL)ブレークを含む複数行のREG_SZ文字列を.regファイルを使用してレジストリにインポートできます。 16進エンコードデータ。このテキストでREG_SZをインポートするには:
1st Line 2nd Line
これを含むMULTILINETEXT.REGというファイルを作成できます。
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Environment] "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コード値の後にヌルバイトを追加するだけです。 REG_SZ値は、UTF-16LE表記のヌル文字(、00,00
)で終了する必要があります。
レジストリ変更をバッチファイル REG.EXE IMPORT MULTILINETEXT.REG
にインポートします。
この例では、Environmentキーを使用していますが、これは便利なためです。環境変数にこのようなデータを追加すると特に便利だからです。 RegEditを使用して、インポートされたREG_SZデータにCRLF文字が含まれていることを確認できます。