是否可以通过 .bat/.cmd 脚本修改注册表项?

Posted

技术标签:

【中文标题】是否可以通过 .bat/.cmd 脚本修改注册表项?【英文标题】:Is it possible to modify a registry entry via a .bat/.cmd script? 【发布时间】:2010-09-12 21:53:12 【问题描述】:

是否可以通过 .bat/.cmd 脚本修改注册表值(无论是字符串还是 DWORD)?

【问题讨论】:

@Shersha Fn 指出,您必须是管理员才能使用 REG.EXE。有没有办法以非管理员身份执行此操作并避免“访问被拒绝”消息? 【参考方案1】:

见http://www.chaminade.org/MIS/Articles/RegistryEdit.htm

【讨论】:

【参考方案2】:

您可以使用 REG 命令。来自http://www.ss64.com/nt/reg.html

Syntax:

   REG QUERY [ROOT\]RegKey /v ValueName [/s]
   REG QUERY [ROOT\]RegKey /ve  --This returns the (default) value

   REG ADD [ROOT\]RegKey /v ValueName [/t DataType] [/S Separator] [/d Data] [/f]
   REG ADD [ROOT\]RegKey /ve [/d Data] [/f]  -- Set the (default) value

   REG DELETE [ROOT\]RegKey /v ValueName [/f]
   REG DELETE [ROOT\]RegKey /ve [/f]  -- Remove the (default) value
   REG DELETE [ROOT\]RegKey /va [/f]  -- Delete all values under this key

   REG COPY  [\\SourceMachine\][ROOT\]RegKey [\\DestMachine\][ROOT\]RegKey

   REG EXPORT [ROOT\]RegKey FileName.reg
   REG IMPORT FileName.reg
   REG SAVE [ROOT\]RegKey FileName.hiv
   REG RESTORE \\MachineName\[ROOT]\KeyName FileName.hiv

   REG LOAD FileName KeyName
   REG UNLOAD KeyName

   REG COMPARE [ROOT\]RegKey [ROOT\]RegKey [/v ValueName] [Output] [/s]
   REG COMPARE [ROOT\]RegKey [ROOT\]RegKey [/ve] [Output] [/s]

Key:
   ROOT :
         HKLM = HKey_Local_machine (default)
         HKCU = HKey_current_user
         HKU  = HKey_users
         HKCR = HKey_classes_root

   ValueName : The value, under the selected RegKey, to edit.
               (default is all keys and values)

   /d Data   : The actual data to store as a "String", integer etc

   /f        : Force an update without prompting "Value exists, overwrite Y/N"

   \\Machine : Name of remote machine - omitting defaults to current machine.
                Only HKLM and HKU are available on remote machines.

   FileName  : The filename to save or restore a registry hive.

   KeyName   : A key name to load a hive file into. (Creating a new key)

   /S        : Query all subkeys and values.

   /S Separator : Character to use as the separator in REG_MULTI_SZ values
                  the default is "\0" 

   /t DataType  : REG_SZ (default) | REG_DWORD | REG_EXPAND_SZ | REG_MULTI_SZ

   Output    : /od (only differences) /os (only matches) /oa (all) /on (no output)

【讨论】:

这个答案非常模糊,尽管它列出了所有可能性(这很好),但它并没有像@nray 的答案那样清楚地回答 OP 的问题【参考方案3】:

您可以制作一个 .reg 文件并在其上调用 start。您可以将注册表的任何部分导出为 .reg 文件以查看格式。

在此处格式化:

http://support.microsoft.com/kb/310516

这可以在任何 Windows 机器上运行而无需安装其他软件。

【讨论】:

【参考方案4】:

是的,您可以使用reg 命令编写脚本。 示例:

reg add HKCU\Software\SomeProduct
reg add HKCU\Software\SomeProduct /v Version /t REG_SZ /d v2.4.6

这将创建密钥HKEY_CURRENT_USER\Software\SomeProduct,并向该密钥添加一个名为“Version”的字符串值“v2.4.6”。

reg /? 有详细信息。

【讨论】:

【参考方案5】:

是的。您可以使用操作系统自带的reg.exe来添加、删除或查询注册表值。 Reg.exe 没有明确的修改命令,但你可以先删除再添加。

【讨论】:

【参考方案6】:

除了 reg.exe,我强烈建议您还检查一下 powershell,它在注册表处理方面的能力要强大得多。

【讨论】:

必须首先在客户端计算机上使用Set-ExecutionPolicy 启用PowerShell 脚本。我有一个批处理脚本,它修改注册表以将执行策略设置为 RemoteSigned。好处是用户无需键入任何命令即可启用和运行 PowerShell 脚本。他们只需双击批处理文件即可。【参考方案7】:

@Franci Penov - 用/f 修改可能的覆盖,例如

reg add "HKCU\Software\etc\etc" /f /v "value" /t REG_SZ /d "Yes"

【讨论】:

+1 for the /f 我已经为此编写了几个脚本,但是没有 /f 实在是太痛苦了;运行脚本时要求我在场以键入“y+[return]” 谢谢。这应该是公认的答案,因为它解释了如何修改现有密钥。【参考方案8】:

这是您可以修改注册表的方法,无需提示是或否,并且不要忘记以管理员身份运行

reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\etc\etc   /v Valuename /t REG_SZ /d valuedata  /f 

下面是一个将 Internet Explorer 设置为我的默认浏览器的真实示例

reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice   /v ProgId /t REG_SZ /d IE.HTTPS  /f 

/f Force:强制更新而不提示“值存在,覆盖 是/否"

/d Data : 存储为“字符串”、整数等的实际数据

/v Value : 值名称,例如 ProgId

/t 数据类型:REG_SZ(默认)| REG_DWORD | REG_EXPAND_SZ | REG_MULTI_SZ

了解有关读取、设置或删除注册表项和值、保存和从 .REG 文件还原的更多信息。来自here

【讨论】:

感谢您的参数定义!

以上是关于是否可以通过 .bat/.cmd 脚本修改注册表项?的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell添加或修改注册表开机启动项脚本

转 BAT CMD 批处理文件脚本总结(中文)

如何让bat,cmd文件后台运行?

远程注册表项提取程序PowerShell脚本

如何使用 wix 在卸载时编写注册表项

braise脚本学习工具分享---删除指定注册表项