Windows レジストリのコマンドに %USERPROFILE% を追加する

Windows レジストリのコマンドに %USERPROFILE% を追加する

新しい VM を作成したり、ラップトップを再描画したりするときに、セットアップ タスクの一部を効率化するレジストリ ハックを作成しようとしています。実行していることの 1 つは、Notepad++ を含む、お気に入りのアプリのポータブル バージョン (Dropbox で同期) に切り替えることです。

レジストリ エントリを作成して、右クリック メニューに [Notepad++ で開く] オプションを表示できるようにしたいのですが、これはポータブル バージョンで唯一欠けている機能です。ただし、エラーが発生します。

Windows cannot access the specified device, path or file. You may not have the 
appropriate permissions to access the item.

.reg私のファイルは次のとおりです:

[HKEY_CLASSES_ROOT\*\shell\Open with Notepad++]
"Icon"="%USERPROFILE%\\Dropbox\\Programs\\Setup\\Icons\\Notepad++.ico"
@=""

[HKEY_CLASSES_ROOT\*\shell\Open with Notepad++\command]
@="%USERPROFILE%\\Dropbox\\Programs\\Notepad++\\notepad++.exe %1"

アイコンは完璧に動作します。ハードコードすれば上記のエントリを正常に動作させることができますC:\Users\myusernameが、ここでは移植性を重視します。

問題は、%シンボルの適切なエスケープ シーケンスを見つけることだけであると確信していますが、断言するのは難しいです。

提案はありますか?

編集: コマンド オプションを選択しadd reg、少し試行錯誤した後、機能したコマンドは次のとおりです。

reg add HKCR\*\shell\OpenWithNotepad++\command /t REG_EXPAND_SZ /ve /d ^%USERPROFILE^%"\Dropbox\Programs\Notepad++\notepad++.exe %1"

コマンドを実行した後、結果も.regファイルとしてエクスポートしました。すべてにおいて勝利です。

答え1

レジストリ内の環境変数を使用(拡張)するには、値のタイプがREG_EXPAND_SZ

に基づくこの質問、そのような値を追加するのが最も簡単でしょうreg.regファイル。

reg add <KEY> /v <NAME> /t REG_EXPAND_SZ /d <DATA>

reg add /?この構文の詳細については を参照してください。

データを16進数でエンコードすることもできます。その例がいくつかあります。ここ:

REG_EXPAND_SZデータはMSが言うように提示されなければならないバイナリデータ型 (サブタイプ "2") であるため、値は 16 進形式、コンマ区切り、1 バイトあたり 2 つのトークン (ゼロで埋める)、もちろん終端のヌル バイトでフォーマットする必要があります (これ以上の説明は明らかにこの記事の範囲をはるかに超えています。また、著者は、ここまでに提供された不完全な情報を誰かが誤用しても責任を負いません)。したがって、上記の行は機能しませんが、私が達成したい最終結果を示しています。実際に機能する .REG ファイル エントリとして、上記の例は次のようにレンダリングされる必要があります。

"SoMeThIng"="%WINDIR%\\system32"

なる

"SoMeThIng"=hex(2):22,25,57,49,4e,44,49,52,25,5c,5c,73,79,73,74,65,6d,33,32,22,00

答え2

12 年後の Windows 11 でも、.reg ファイルの REG_EXPAND_SZ にはまだ 16 進文字列が必要です。CMD
ファイルに reg.exe コマンドを記述する方がまだ簡単です。

CMD経由でreg.exeを使用する場合、次の操作も実行できます。env
-varsCMDで展開、 のでレジストリをプレーン文字列として入力する
構文は少し単純で、% の前の ^ を省略し、
文字列全体を引用符で囲みます。タイプを REG_SZ に設定することを忘れないでください。

reg add HKCU\Software\Classes\*\shell\OpenWithNPP\command /t REG_SZ /ve /d "%AllUsersProfile%\apps\npp\notepad++.exe %1"

REG QUERY HKCU\Software\Classes\*\shell\OpenWithNPP\command /s

結果:

HKEY_CURRENT_USER\Software\Classes\*\shell\OpenWithNPP\command
    (Default)    REG_SZ    C:\ProgramData\apps\npp\notepad++.exe %1

後で「既知のフォルダー」を別の場所に移動しない限り、
ハードコードされたパスは引き続き機能します。

%AllUsersProfile% は古く、XP と互換性があります。
%ProgramData% は、現在使用されているものと同等です。
ただし、これは、VM で XP を実行して古いアプリを実行する Mac ユーザー向けに行います。;)

XP では実際のパスは異なりますが、cmd スクリプトでこの方法を使用すると、
実行されているマシンの正しいパスが挿入されます。

関連情報