將 %USERPROFILE% 新增到 Windows 登錄中的命令

將 %USERPROFILE% 新增到 Windows 登錄中的命令

我正在嘗試編寫一個註冊表破解程序,當我創建新的虛擬機器或重新安裝我的筆記型電腦時,它可以簡化我的一些設定任務。我正在做的一件事是切換到一堆我最喜歡的應用程式的便攜式版本(在 Dropbox 中同步),包括 Notepad++。

我想建立一個註冊表項,以允許我在右鍵單擊選單中使用“使用 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 /?有關此語法的更多信息,請參閱 參考資料。

您也可以將資料編碼為十六進位。有一些這樣的例子這裡:

REG_EXPAND_SZ數據必須以 MS 所說的方式呈現二進位資料類型(子類型“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 的十六進位字串。
在 CMD 檔案中編寫 reg.exe 命令仍然更容易。

當透過 CMD 使用 reg.exe 時,我們還可以執行以下操作:
讓 env-vars在CMD中展開, 所以他們以純字串形式輸入註冊表
語法有點簡單,因為您在 % 之前省略 ^
並引用整個字串。請記得將類型設為 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% 相當於現在使用的。
但我為在虛擬機器中擁有 XP 來運行舊應用程式的 Mac 用戶執行此操作。 ;)

XP 中的實際路徑有所不同,但在 cmd 腳本中使用此方法會
為其執行的電腦插入正確的路徑。

相關內容