将 %USERPROFILE% 添加到 Windows 注册表中的命令

将 %USERPROFILE% 添加到 Windows 注册表中的命令

我正在尝试编写一个注册表黑客程序,以便在创建新虚拟机或重新安装笔记本电脑时简化一些设置任务。我正在做的一件事是将我最喜欢的一堆应用程序(包括 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 /?有关此语法的更多信息,请参阅。

您还可以将数据编码为十六进制。这里有一些示例这里

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% 相当于现在使用的。
但我为在 VM 中安装 XP 的 Mac 用户执行此操作以运行旧应用程序。;)

在 XP 中实际路径有所不同,但在 cmd 脚本中使用此方法会
为其运行的机器插入正确的路径。

相关内容