如何从 cmd 修改现有的注册表项值?
Reg 命令有很多选项和开关,以及花哨的功能。有查询、添加和删除键、子键和值名称的选项。但是,如何修改现有值名称的数据?您是否要完全删除值名称,然后再次添加并重新输入修改后的值/数据?这似乎很麻烦……
我对任何脚本/批处理自动化都不感兴趣,至少现在不感兴趣,我只想通过 cmd Reg 命令进行简单的注册表编辑。无需销毁某个键,只需在一秒钟后添加一些附加数据即可。您可以在 Regedit 中执行相同的操作。
这里有一个例子可以激发你的思考过程。
Key: HKEY_CURRENT_USER\Software\Citrix\Receiver
Value type: reg_sz
Value name: UpgradeDone
Value data: true
现在这个还不错,但如果我必须将值数据从“true”更改为“false”,该怎么办?这样我就得到了这个:
Key: HKEY_CURRENT_USER\Software\Citrix\Receiver
Value type: reg_sz
Value name: UpgradeDone
Value data: false
从 cmd 执行该操作的选项和语法是什么?....
更新:
我现在才意识到上面的例子可能太简单了......
在上面的例子中我只需执行以下操作:
reg delete HKEY_CURRENT_USER\Software\Citrix\Receiver /v UpgradeDone
reg add HKEY_CURRENT_USER\Software\Citrix\Receiver /v UpgradeDone /t Reg_Sz /d false
我可以完全删除该值,然后再次添加它,因为其中包含的数据非常小。它只是一个像“true”或“false”这样的字符串。重新创建它并不难。
这是一个更难的例子包含更多数据内容:
Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Value name: Path
Value type: Reg_Sz
Data: C:\Program Files (x86)\ImageMagick-6.8.5-Q16;C:\PROGRA~2\GTK2-R~1\bin;C:\Program Files (x86)\AMD APP\bin\x86_64;C:\Program Files (x86)\AMD APP\bin\x86;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;C:\Windows\System32\WindowsPowerShell\v1.0\;"C:\Program Files (x86)\WinHasher";C:\Program Files (x86)\Android\android-sdk\tools\;C:\Program Files (x86)\Android\android-sdk\platform-tools\;C:\Program Files (x86)\GTK2-Runtime\bin;C:\Program Files (x86)\MiKTeX 2.9\miktex\bin\;C:\Program Files (x86)\Common Files\Teleca Shared;C:\Program Files (x86)\Notepad++
我只想删除部分数据内容。具体来说,我只想删除最后一个搜索路径,即 C:\Program Files (x86)\Notepad++。
您如何解决这个问题?...
你不希望我重新输入这些内容吗?......
答案1
与“/f”参数一起使用REG ADD
强制覆盖。
REG ADD /?
解释参数。
REG ADD KeyName [/v ValueName | /ve] [/t type] [/s Separator] [/d Data] [/f]
KeyName [\\Machine\]FullKey
Machine Name of remote machine - omitting defaults to the current machine
Only HKLM and HKU are available on remote machines
FullKey ROOTKEY\SubKey ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ] SubKey
The full name of a registry key under the selected ROOTKEY
/v The value name, under the selected Key, to add
/ve adds an empty value name <no name> for the key
/t RegKey data types
[ REG_SZ | REG_MULTI_SZ | REG_DWORD_BIG_ENDIAN | REG_DWORD |
REG_BINARY | REG_DWORD_LITTLE_ENDIAN | REG_NONE | REG_EXPAND_SZ ]
If omitted, REG_SZ is assumed
/s Specify one character that you use as the separator in your data
string for REG_MULTI_SZ. If omitted, use "\0" as the separator
/d The data to assign to the registry ValueName being added
/f Force overwriting the existing registry entry without prompt
要插入新值或将字符串值从“false”切换为“true”,请使用如下命令:
reg add HKCU\Software\Citrix\Receiver /t REG_SZ /v UpgradeDone /d true /f
读取现有值并在写回之前附加一些字符串的示例:
set append=XXXXXX
set key=HKCU\Software\myTest
set value=myValue
set oldVal=
for /F "skip=2 tokens=3" %%r in ('reg query %key% /v %value%') do set oldVal=%%r
echo previous=%oldVal%
set newVal=%oldVal%%append%
reg add %key% /v %value% /d %newVal% /f
笔记:此示例假设旧值和新值没有空格。否则必须添加引号并更改“tokens”参数。为简洁起见,省略了额外的错误检查。但是,全部注册表操作代码肯定必须进行充分的错误检查。
答案2
您还可以REG import foo.reg
在其中foo.reg
找到一个包含通常的注册表信息的文件,就像从中导出的一样regedit.exe
。
在您的示例中,这将是类似于:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
"Path"="C:\Program Files (x86)\ImageMagick-6.8.5-Q16;C:\PROGRA~2\GTK2-R~1\bin;C:\Program Files (x86)\AMD APP\bin\x86_64;C:\Program Files (x86)\AMD APP\bin\x86;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;C:\Windows\System32\WindowsPowerShell\v1.0\;"C:\Program Files (x86)\WinHasher";C:\Program Files (x86)\Android\android-sdk\tools\;C:\Program Files (x86)\Android\android-sdk\platform-tools\;C:\Program Files (x86)\GTK2-Runtime\bin;C:\Program Files (x86)\MiKTeX 2.9\miktex\bin\;C:\Program Files (x86)\Common Files\Teleca Shared;C:\Program Files (x86)\Notepad++"
更多信息请访问这篇 Microsoft Technet 文章。