我想添加一个扩展的注册表项,HKCR\Drive\shell\Cmder\command
其值名为(Default)
。
如果我使用注册表编辑器,它会自动添加一个REG_SZ
带有名称Default
的字符串值类型。之后无法更改值的类型或删除该值(以便用新值替换)。
如果我reg add
在命令行或.reg
文件中使用,它会说操作成功完成或键和值已成功添加,但注册表更改并未真正完成。
为了确保没有语法错误,这是一个示例docs.microsoft.com应添加一个扩展的注册表项,HKLM\Software\MyCo
其值为Path
,类型REG_EXPAND_SZ
和数据为%systemroot%
:
reg add HKLM\Software\MyCo /v Path /t REG_EXPAND_SZ /d ^%systemroot^%
它成功完成,但注册表中的更改仍然没有完成。密钥MyCo
不存在。
我可能执行的命令有问题吗reg add
?还有其他方法可以将REG_EXPAND_SZ
具有名称的类型条目添加(Default)
到注册表吗?
更新:
Microsoft 的示例确实有效,但为了查看更改,您需要打开注册表编辑器的新实例(已经运行的实例由于某种原因不会更新)
答案1
您不能使用 RegEdit 来执行此操作。(或者至少我认为您不能这样做!)..
使用 reg.exe 命令行将其拉下来。
reg.exe add <key_name> /ve /t REG_EXPAND_SZ /d "%path%"
(例如)。
答案2
为了记录,创建(Default)
类型值的其他方法REG_EXPAND_SZ
:
如果您更喜欢直接在 中创建键/值
RegEdit
,这样可以更轻松地编写带有嵌入引号和斜杠的字符串值,然后您可以让Regedit
完成转义特殊字符和编码 unicode 字符串的工作。要创建(Default)
类型的值REG_EXPAND_SZ
:- 创建密钥。
temp
创建一个名为类型的值REG_EXPAND_SZ
,并为其指定所需的值(Default)
。- 导出到 .reg 文件。
- 编辑文件,剪切
"temp"
到剪贴板然后替换为@
。然后添加新行,粘贴"temp"
后跟=-
。 - 保存并合并。
注册表导出:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\DummySoftware\Path]
"temp"=hex(2):25,00,55,00,73,00,65,00,72,00,50,00,72,00,6f,00,66,00,69,00,6c,\
00,65,00,25,00,5c,00,44,00,75,00,6d,00,6d,00,79,00,53,00,6f,00,66,00,74,00,\
57,00,61,00,72,00,65,00,00,00
编辑后:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\DummySoftware\Path]
@=hex(2):25,00,55,00,73,00,65,00,72,00,50,00,72,00,6f,00,66,00,69,00,6c,\
00,65,00,25,00,5c,00,44,00,75,00,6d,00,6d,00,79,00,53,00,6f,00,66,00,74,00,\
57,00,61,00,72,00,65,00,00,00
"temp"=-
PowerShell 也是一个选项。
$Splat = @{ 'Path' = 'HKCR:\SOFTWARE\DummySoftware2\Path' 'Value = '%UserProfile%\DummySoftware2' 'ItemType' = 'ExpandString' 'Force' = $False } New-Item $Splat