注册表语法
.reg 文件具有以下语法:
RegistryEditorVersion
Blank line
[RegistryPath1]
"DataItemName1"="DataType1:DataValue1"
DataItemName2"="DataType2:DataValue2"
Blank line
[RegistryPath2]
"DataItemName3"="DataType3:DataValue3"
其中:
RegistryEditorVersion 是“Windows Registry Editor Version 5.00”(对于 Windows 2000、Windows XP 和 Windows Server 2003)或“REGEDIT4”(对于 Windows 98 和 Windows NT 4.0)。“REGEDIT4”表头也适用于基于 Windows 2000、Windows XP 和 Windows Server 2003 的计算机。
Blank line 就是一个空行。它标识新的注册表路径的开始。每个项或子项都是一个新的注册表路径。如果 .reg 文件中有多个项,空白行可以帮助您检查内容和排查其中的问题。
RegistryPathx 是保留要导入的第一个值的子项的路径。请用方括号将路径括起来,并用反斜杠将层次结构的各个级别隔开。例如:
[HKEY_LOCAL_ MACHINE\SOFTWARE\Policies\Microsoft\Windows\System]
一个 .reg 文件可以包含多个注册表路径。 如果注册表中不存在路径语句中底层的层次结构,将创建一个新的子项。注册表文件的内容将按照它们的输入顺序发送到注册表。因此,如果您要新建一个包含另一子项的子项,必须按正确的顺序输入行。
DataItemNamex 是要导入的数据项的名称。如果文件中的数据项在注册表中不存在,.reg 文件将添加该数据项及其值。如果数据项存在,.reg 文件中的值将覆盖现有的值。数据项的名称用引号引起来。数据项名称后紧跟着一个等号 (=)。
DataTypex 是注册表值的数据类型,紧跟在等号后面。对于 REG_SZ(字符串值)以外的所有数据类型,数据类型后都紧跟一个冒号。如果数据类型是 REG_SZ,则不包括数据类型值或冒号。在这种情况下,Regedit.exe 假定数据类型为 REG_SZ。下表列出了典型的注册表数据类型:
数据类型 .reg 中的数据类型
REG_BINARY hexadecimal
REG_DWORD dword
REG_EXPAND_SZ hexadecimal(2)
REG_MULTI_SZ hexadecimal(7)
名称 数据类型 说明
二进制值 REG_BINARY 原始二进制数据。大多数硬件组件信息作为二进制数据存储,以十六进制的格式显示在注册表编辑器中。
DWORD 值 REG_DWORD 由 4 字节长(32 位整数)的数字表示的数据。设备驱动程序和服务的许多参数都是此类型,以二进制、十六进制或十进制格式显示在注册表编辑器中。与之有关的值是 DWORD_LITTLE_ENDIAN(最不重要的字节在最低位地址)和 REG_DWORD_BIG_ENDIAN(最不重要的字节在最高位地址)。
可扩展字符串值 REG_EXPAND_SZ 长度可变的数据字符串。这种数据类型包括程序或服务使用该数据时解析的变量。
多字符串值 REG_MULTI_SZ 多字符串。包含用户可以阅读的列表或多个值的值通常就是这种类型。各条目之间用空格、逗号或其他标记分隔。
字符串值 REG_SZ 长度固定的文本字符串。
二进制值 REG_RESOURCE_LIST 一系列嵌套的数组,用于存储硬件设备驱动程序或它控制的某个物理设备所使用的资源列表。此数据由系统检测并写入 \ResourceMap 树,作为二进制值以十六进制的格式显示在注册表编辑器中。
二进制值 REG_RESOURCE_REQUIREMENTS_LIST 一系列嵌套的数组,用于存储设备驱动程序或它控制的某个物理设备可以使用的可能的硬件资源列表,系统将此列表的子集写入 \ResourceMap 树。此数据由系统检测,作为二进制值以十六进制的格式显示在注册表编辑器中。
二进制值 REG_FULL_RESOURCE_DESCRIPTOR 一系列嵌套的数组,用于存储物理硬件设备使用的资源列表。此数据由系统检测并写入 \HardwareDescription 树,作为二进制值以十六进制的格式显示在注册表编辑器中
无 REG_NONE 没有具体类型的数据。此数据由系统或应用程序写到注册表,作为二进制值以十六进制的格式显示在注册表编辑器中
链接 REG_LINK 一个 Unicode 字符串,它命名一个符号链接。
QWORD值 REG_QWORD 由 64 位整数数字表示的数据。此数据作为二进制值显示在注册表编辑器中,最初用在 Windows 2000 中。
DataValuex 紧跟在冒号(对于 REG_SZ,则为等号)后面,并且格式必须正确(例如,字符串或十六进制)。对二进制数据项使用十六进制格式。
注意:可以为同一个注册表路径输入多个数据项行。
添加注册表子项或添加和更改注册表值
要添加注册表子项或添加/更改注册表值,请在注册表中进行相应的更改,然后导出相应的一个或多个子项。导出的注册表子项自动另存为 .reg 文件。要对注册表进行更改并将更改导出到 .reg 文件,请按照下列步骤操作:
1. 单击“开始”,单击“运行”,在“打开”框中键入 regedit,然后单击“确定”。
2. 找到并单击存放要更改的注册表项的子项。
3. 单击“文件”,然后单击“导出”。
此步骤在您进行更改之前备份子项。如果所作更改产生现问题,您可以随后将此文件重新导入注册表。
4. 在“文件名”框中,键入用于保存包含原始注册表项的 .reg 文件的文件名,然后单击“保存”。
注意:请使用能提示其内容的名称,例如,可引用该子项的名称。
5. 在右窗格中,添加或修改所需的注册表项。
6. 重复第 3 步和第 4 步,再次导出该子项,但是对该 .reg 文件使用不同的文件名。可以使用此 .reg 文件在其他计算机上对注册表进行更改。
7. 在本地计算机上测试所作更改。如果它们产生问题,请双击存放原始注册表数据备份的文件,以将注册表返回到其原始状态。如果更改起到预期作用,则可以使用本文分发注册表更改一节中的方法将您在第 6 步中创建的 .reg 文件向其他计算机分发。
删除注册表项和值
要使用 .reg 文件删除注册表项,请在 .reg 文件中的注册表路径 前放置一个连字符 (-)。例如,要从以下注册表项中删除 Test 子项:
HKEY_LOCAL_MACHINE\Software
请在 .reg 文件中的以下注册表项前放置一个连字符:
HKEY_LOCAL_MACHINE\Software\Test
以下示例就是一个可以执行此任务的 .reg 文件。
[-HKEY_LOCAL_MACHINE\Software\Test]
要使用 .reg 文件删除注册表值,请在 .reg 文件中的数据项名称 后的等号后放置一个连字符 (-)。例如,要从以下注册表项中删除 TestValue 注册表值:
HKEY_LOCAL_MACHINE\Software\Test
请在 .reg 文件中的 "TestValue"= 后面放置一个连字符。以下示例就是一个可以执行此任务的 .reg 文件。
HKEY_LOCAL_MACHINE\Software\Test
"TestValue"=-
要创建 .reg 文件,请使用 Regedit.exe 导出要删除的注册表项,然后使用记事本编辑 .reg 文件并插入连字符。
重命名注册表项和值
要重命名项或值,请删除该项或值,然后创建一个具有新名称的新项或新值。
注意如果你需要在注册表中使用文件路径,那么文件路径的 斜杠\ 需要使用 双斜杠 \\
如果使用系统变量,则需要把系统变量中的斜杠替换成双斜杠
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\EditPlus 2]
@="EditPlus 2"
[HKEY_CLASSES_ROOT\*\shell\EditPlus 2\command]
@="C:\\Program Files (x86)\\EditPlus 2\\EditPlus.exe %1"
此例中,如果把路径替换为变量
@="%PROGRAMFILES(x86)%\\EditPlus 2\\EditPlus.exe %1" 实际结果为 @="C:\Program Files (x86)\\EditPlus 2\\EditPlus.exe %1"
这样是错误的,系统将无法找到文件
应该用DOS批处理来生成改reg文件,这里要使用到文本替换命令把单斜杠替换为双斜杠,如下
@echo off
echo "默认使用86文件夹,兼容32位系统执行"
set var=%PROGRAMFILES%
if "%PROCESSOR_ARCHITECTURE%"=="AMD64" set "var=%PROGRAMFILES(x86)%"
set "var=%var:\=\\%"
echo Windows Registry Editor Version 5.00 >menu.reg
echo. >>menu.reg
echo [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell] >>menu.reg
echo. >>menu.reg
echo [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\EditPlus 2] >>menu.reg
echo. >>menu.reg
echo @="EditPlus 2" >>menu.reg
echo. >>menu.reg
echo [HKEY_CLASSES_ROOT\*\shell\EditPlus 2\command]>>menu.reg
echo. >>menu.reg
echo @="%var%\\EditPlus 2\\EditPlus.exe %%1">>menu.reg
regedit /s menu.reg