如何从cmd修改现有注册表项值名称的数据?


19

如何从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 ++。

您如何解决这个问题?......

您不希望我重新输入所有这些内容吗?


您的问题是专门关于从命令行编辑PATH还是任何值?同样,替换或附加/添加到任何reg值很容易,但是修改/删除部分值将需要更多的工作。
卡兰2013年

Answers:


37

使用REG ADD带有“/ F”参数强制覆盖。

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

注意:此示例假定旧值和新值没有空格。否则,必须添加引号并更改“令牌”参数。为简洁起见,省略了额外的错误检查。但是,所有注册表操作代码绝对必须进行足够的错误检查。


所以...强制“覆盖”实际上是将数据附加到值名称上吗?...它不会覆盖现有数据吗??
Samir 2013年

因此,使用上面的第二个示例,您是在说我可以reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment /v Path /d ;C:\Program Files (x86)\Some_software /f附加;C:\Program Files (x86)\Some_software到字符串的末尾吗?
萨米尔

不,“ REG / ADD”只是插入或覆盖。要追加,您必须“对该值进行REG / QUERY”,计算所需的值,然后将其“ REG / ADD”返回。
Axel Kemper

是的,这似乎是事实。我刚试过 reg add HKEY_CURRENT_USER\Software\Citrix\Receiver /v UpgradeDone /t Reg_Sz /d false 价值UpgradeDone存在,是否覆盖(是/否)?因此,如果没有/ f开关,它将询问您是否要覆盖。
萨米尔

您能解释一下如何将数据附加到现有值名称吗?您所说的“计算”是什么意思?
萨米尔2013年

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.