根据Microsoft knowledge base article 310516,应该使用
启动编辑Windows注册表的.reg文件Windows Registry Editor Version 5.00
REGEDIT4
在Windows 7上,使用Windows Registry Editor Version 5.00
启动是否正确,或者是否应该使用状态版本6?
在运行.bat文件时,实际上是否需要它?
对于当前版本,请在菜单项关于注册表编辑器的帮助菜单中单击注册表编辑器。
答案 0 :(得分:3)
主要使用两个标准应用程序来处理批处理文件中的Windows注册表:
在Windows x64上,它们都以32位和64位应用程序的形式存在,32位版本访问注册表,如32位应用程序,这意味着registry redirector处于活动状态,64位应用程序的注册表项是对于32位 REG 和 REGEDIT 不可见。
通常最好使用 REG 而不是 REGEDIT 来获取(读访问权限)或设置(写访问权限)批处理文件中的几个键或值。
REGEDIT 的使用始终需要管理员权限,因为Windows Vista甚至只用于将密钥导出到注册表文件(读访问权限)或从注册表文件(写访问权限)导入数据< strong> HKEY_CURRENT_USER (简称:HKCU)。
使用 REG 许多操作,例如 QUERY (读访问权限)或 ADD (写访问权限)到HKCU不需要管理员特权。当然,对 HKEY_LOCAL_MACHINE (简称:HKLM)的写访问权限需要管理员权限以及其他不常用的操作。在命令提示符窗口reg /?
中运行会显示可用的操作。在控制台窗口中执行的reg query /?
和reg add /?
显示了在Windows注册表中获取(查询)或设置(添加)数据的语法和选项。
如果文件的第一行包含
,则仅在导入时将* .reg文件解释为具有有效注册表数据的文件这不是注册表编辑器或Windows版本的版本。它是文件本身中注册表数据格式的版本信息。所以它是一个注册表文件格式版本。注册表文件的第一行必须具有这两个字符串中的一个。
尝试导入没有此标题行的* .reg文件会导致错误。
Windows 2000(还有 regedt32.exe )和更高版本的Windows支持两种格式版本4和5的注册表文件。
Windows 95,98,Millennium和NT4仅支持格式为4的注册表文件。
因此,现在(2016年)主要依赖于用于注册表文件的数据格式。
主要区别在于支持的encoding文字数据。
REGEDIT4 格式的注册表文件只能使用code page中为Windows region settings定义的Windows-1252文本文件,其中Unicode用于非Unicode感知应用程序{{3}对于北美和西欧国家。因此, REGEDIT4 格式的注册表文件不能包含代码值大于255(十进制,0xFF十六进制)的Unicode个字符。
格式 Windows注册表编辑器版本5.00 的注册表文件支持根据UTF-16标准编码的每个字符超过1个字节的文本。因此, Windows注册表编辑器版本5.00 格式的* .reg文件由 REGEDIT 创建为Little Endian Byte Order Mark编码的文本文件ASCII (FF FE)。
因此,如果要导入/导出的数据是二进制文件或仅使用code page 437个字符(代码值&lt;十进制128)的文本,因为99.99%的注册表数据都是,则使用哪种文件格式无关紧要。
对于非ASCII字符,了解Windows命令解释程序使用哪个代码页非常重要,因为这通常是OEM代码页,如code page 850(美国,加拿大)或Registry Value Types(西欧) )与GUI代码页Windows-1252不同。在命令提示符窗口chcp
或mode con
中运行,通过Windows命令解释程序输出当前计算机上用于控制台的默认代码页。
如果确实需要支持Unicode字符串,则必须使用格式 Windows注册表编辑器版本5.00 。
让我们看一个假设的Unicode示例:
在密钥HKCU\RegFormat
下的Windows注册表中,定义了两个Unicode字符串:
类型为REG_SZ
的字符串,名称为Two Not Equal 3
,带有Unicode字符串值:
2 ≠ 3
类型为REG_MULTI_SZ
的多行字符串,其名称为Formulas
,具有Unicode字符串值:
2 µs × 3 = 6 µs
A = π × r²
有关注册表值类型的详细信息,请参阅Microsoft文章Distributing Registry Changes,Data Types in the Registry和not equal sign。
以格式 Windows注册表编辑器版本5.00 格式导出密钥HKCU\RegFormat
,因为Windows 2000会生成带有596字节内容的UTF-16 LE编码文本文件:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\RegFormat]
"Two Not Equal 3"="2 ≠ 3"
"Formulas"=hex(7):32,00,20,00,b5,00,73,00,20,00,d7,00,20,00,33,00,20,00,3d,00,\
20,00,36,00,20,00,b5,00,73,00,00,00,41,00,20,00,3d,00,20,00,c0,03,20,00,d7,\
00,20,00,72,00,b2,00,00,00,00,00
此文件的字节流以十六进制查看器/编辑器显示为:
00000000h: FF FE 57 00 69 00 6E 00 64 00 6F 00 77 00 73 00 ; ÿþW.i.n.d.o.w.s.
00000010h: 20 00 52 00 65 00 67 00 69 00 73 00 74 00 72 00 ; .R.e.g.i.s.t.r.
00000020h: 79 00 20 00 45 00 64 00 69 00 74 00 6F 00 72 00 ; y. .E.d.i.t.o.r.
00000030h: 20 00 56 00 65 00 72 00 73 00 69 00 6F 00 6E 00 ; .V.e.r.s.i.o.n.
00000040h: 20 00 35 00 2E 00 30 00 30 00 0D 00 0A 00 0D 00 ; .5...0.0.......
00000050h: 0A 00 5B 00 48 00 4B 00 45 00 59 00 5F 00 43 00 ; ..[.H.K.E.Y._.C.
00000060h: 55 00 52 00 52 00 45 00 4E 00 54 00 5F 00 55 00 ; U.R.R.E.N.T._.U.
00000070h: 53 00 45 00 52 00 5C 00 52 00 65 00 67 00 46 00 ; S.E.R.\.R.e.g.F.
00000080h: 6F 00 72 00 6D 00 61 00 74 00 5D 00 0D 00 0A 00 ; o.r.m.a.t.].....
00000090h: 22 00 54 00 77 00 6F 00 20 00 4E 00 6F 00 74 00 ; ".T.w.o. .N.o.t.
000000a0h: 20 00 45 00 71 00 75 00 61 00 6C 00 20 00 33 00 ; .E.q.u.a.l. .3.
000000b0h: 22 00 3D 00 22 00 32 00 20 00 60 22 20 00 33 00 ; ".=.".2. .`" .3.
000000c0h: 22 00 0D 00 0A 00 22 00 46 00 6F 00 72 00 6D 00 ; ".....".F.o.r.m.
000000d0h: 75 00 6C 00 61 00 73 00 22 00 3D 00 68 00 65 00 ; u.l.a.s.".=.h.e.
000000e0h: 78 00 28 00 37 00 29 00 3A 00 33 00 32 00 2C 00 ; x.(.7.).:.3.2.,.
000000f0h: 30 00 30 00 2C 00 32 00 30 00 2C 00 30 00 30 00 ; 0.0.,.2.0.,.0.0.
00000100h: 2C 00 62 00 35 00 2C 00 30 00 30 00 2C 00 37 00 ; ,.b.5.,.0.0.,.7.
00000110h: 33 00 2C 00 30 00 30 00 2C 00 32 00 30 00 2C 00 ; 3.,.0.0.,.2.0.,.
00000120h: 30 00 30 00 2C 00 64 00 37 00 2C 00 30 00 30 00 ; 0.0.,.d.7.,.0.0.
00000130h: 2C 00 32 00 30 00 2C 00 30 00 30 00 2C 00 33 00 ; ,.2.0.,.0.0.,.3.
00000140h: 33 00 2C 00 30 00 30 00 2C 00 32 00 30 00 2C 00 ; 3.,.0.0.,.2.0.,.
00000150h: 30 00 30 00 2C 00 33 00 64 00 2C 00 30 00 30 00 ; 0.0.,.3.d.,.0.0.
00000160h: 2C 00 5C 00 0D 00 0A 00 20 00 20 00 32 00 30 00 ; ,.\..... . .2.0.
00000170h: 2C 00 30 00 30 00 2C 00 33 00 36 00 2C 00 30 00 ; ,.0.0.,.3.6.,.0.
00000180h: 30 00 2C 00 32 00 30 00 2C 00 30 00 30 00 2C 00 ; 0.,.2.0.,.0.0.,.
00000190h: 62 00 35 00 2C 00 30 00 30 00 2C 00 37 00 33 00 ; b.5.,.0.0.,.7.3.
000001a0h: 2C 00 30 00 30 00 2C 00 30 00 30 00 2C 00 30 00 ; ,.0.0.,.0.0.,.0.
000001b0h: 30 00 2C 00 34 00 31 00 2C 00 30 00 30 00 2C 00 ; 0.,.4.1.,.0.0.,.
000001c0h: 32 00 30 00 2C 00 30 00 30 00 2C 00 33 00 64 00 ; 2.0.,.0.0.,.3.d.
000001d0h: 2C 00 30 00 30 00 2C 00 32 00 30 00 2C 00 30 00 ; ,.0.0.,.2.0.,.0.
000001e0h: 30 00 2C 00 63 00 30 00 2C 00 30 00 33 00 2C 00 ; 0.,.c.0.,.0.3.,.
000001f0h: 32 00 30 00 2C 00 30 00 30 00 2C 00 64 00 37 00 ; 2.0.,.0.0.,.d.7.
00000200h: 2C 00 5C 00 0D 00 0A 00 20 00 20 00 30 00 30 00 ; ,.\..... . .0.0.
00000210h: 2C 00 32 00 30 00 2C 00 30 00 30 00 2C 00 37 00 ; ,.2.0.,.0.0.,.7.
00000220h: 32 00 2C 00 30 00 30 00 2C 00 62 00 32 00 2C 00 ; 2.,.0.0.,.b.2.,.
00000230h: 30 00 30 00 2C 00 30 00 30 00 2C 00 30 00 30 00 ; 0.0.,.0.0.,.0.0.
00000240h: 2C 00 30 00 30 00 2C 00 30 00 30 00 0D 00 0A 00 ; ,.0.0.,.0.0.....
00000250h: 0D 00 0A 00 ; ....
以代码页Windows-1252显示的前2个字节为ÿþ
是UTF-16 LE BOM的两个字节,文本编辑器在文本编辑模式下不会显示这两个字节。
但是,通过单击导出对话框中的文件类型下拉列表并选择 Win9x / NT4注册表文件<,以 REGEDIT4 格式导出密钥HKCU\RegFormat
/ strong>产生ANSI(更精确:Windows-1252)编码的文本文件,内容只有180个字节:
REGEDIT4
[HKEY_CURRENT_USER\RegFormat]
"Two Not Equal 3"="2 ? 3"
"Formulas"=hex(7):32,20,b5,73,20,d7,20,33,20,3d,20,36,20,b5,73,00,41,20,3d,20,\
c0,20,d7,20,72,b2,00,00
此文件的字节流以十六进制查看器/编辑器显示为:
00000000h: 52 45 47 45 44 49 54 34 0D 0A 0D 0A 5B 48 4B 45 ; REGEDIT4....[HKE
00000010h: 59 5F 43 55 52 52 45 4E 54 5F 55 53 45 52 5C 52 ; Y_CURRENT_USER\R
00000020h: 65 67 46 6F 72 6D 61 74 5D 0D 0A 22 54 77 6F 20 ; egFormat].."Two
00000030h: 4E 6F 74 20 45 71 75 61 6C 20 33 22 3D 22 32 20 ; Not Equal 3"="2
00000040h: 3F 20 33 22 0D 0A 22 46 6F 72 6D 75 6C 61 73 22 ; ? 3".."Formulas"
00000050h: 3D 68 65 78 28 37 29 3A 33 32 2C 32 30 2C 62 35 ; =hex(7):32,20,b5
00000060h: 2C 37 33 2C 32 30 2C 64 37 2C 32 30 2C 33 33 2C ; ,73,20,d7,20,33,
00000070h: 32 30 2C 33 64 2C 32 30 2C 33 36 2C 32 30 2C 62 ; 20,3d,20,36,20,b
00000080h: 35 2C 37 33 2C 30 30 2C 34 31 2C 32 30 2C 33 64 ; 5,73,00,41,20,3d
00000090h: 2C 32 30 2C 5C 0D 0A 20 20 63 30 2C 32 30 2C 64 ; ,20,\.. c0,20,d
000000a0h: 37 2C 32 30 2C 37 32 2C 62 32 2C 30 30 2C 30 30 ; 7,20,72,b2,00,00
000000b0h: 0D 0A 0D 0A ; ....
有什么区别?
REGEDIT 首先将类型为REG_SZ的字符串从Unicode转换为代码页Windows-1252,然后导出数据。结果是字符?
而不是small PI,其中Unicode值为U + 2260,类型为REG_SZ
的字符串,因为此字符在代码页Windows-1252中不可用。
多行字符串只有十六进制值的一半(每个字符只有1个字节,而不是每个字符2个字节)。
具有Unicode值U + 03C0的SHRegWriteUSValue以值C0(只是低字节)存储,因此现在是字符À
,因为此字符在代码页Windows中具有代码值0xC0 -1252。
以 Windows注册表编辑器5.00版格式从文件导入数据导致在Windows注册表中获取与以前相同的数据。
但是以 REGEDIT4 格式从文件导入数据会导致:
类型为REG_SZ
的字符串,其名称为Two Not Equal 3
,其中包含ANSI字符串值:
2 ? 3
类型为REG_MULTI_SZ
的多行字符串,其名称为Formulas
,具有Unicode字符串值:
2 µs × 3 = 6 µs
A = À × r²
字符µ
和×
以及²
的代码值< 255(十进制),因此也可以正确存储在格式 REGEDIT4 的注册表文件中。但≠
和π
无法以格式4进行正确编码。
格式为 Windows注册表编辑器版本5.00 的注册表文件本身不能是Unicode编码的文本文件。也可以使用内容为
的Windows-1252编码注册表文件Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\RegFormat]
"Two Not Equal 3"=hex(1):32,00,60,22,33,00
"Formulas"=hex(7):32,00,20,00,b5,00,73,00,20,00,d7,00,20,00,33,00,20,00,3d,00,\
20,00,36,00,20,00,b5,00,73,00,00,00,41,00,20,00,3d,00,20,00,c0,03,20,00,d7,\
00,20,00,72,00,b2,00,00,00,00,00
以十六进制查看器/编辑器显示为:
00000000h: 57 69 6E 64 6F 77 73 20 52 65 67 69 73 74 72 79 ; Windows Registry
00000010h: 20 45 64 69 74 6F 72 20 56 65 72 73 69 6F 6E 20 ; Editor Version
00000020h: 35 2E 30 30 0D 0A 0D 0A 5B 48 4B 45 59 5F 43 55 ; 5.00....[HKEY_CU
00000030h: 52 52 45 4E 54 5F 55 53 45 52 5C 52 65 67 46 6F ; RRENT_USER\RegFo
00000040h: 72 6D 61 74 5D 0D 0A 22 54 77 6F 20 4E 6F 74 20 ; rmat].."Two Not
00000050h: 45 71 75 61 6C 20 33 22 3D 68 65 78 28 31 29 3A ; Equal 3"=hex(1):
00000060h: 33 32 2C 30 30 2C 36 30 2C 32 32 2C 33 33 2C 30 ; 32,00,60,22,33,0
00000070h: 30 0D 0A 22 46 6F 72 6D 75 6C 61 73 22 3D 68 65 ; 0.."Formulas"=he
00000080h: 78 28 37 29 3A 33 32 2C 30 30 2C 32 30 2C 30 30 ; x(7):32,00,20,00
00000090h: 2C 62 35 2C 30 30 2C 37 33 2C 30 30 2C 32 30 2C ; ,b5,00,73,00,20,
000000a0h: 30 30 2C 64 37 2C 30 30 2C 32 30 2C 30 30 2C 33 ; 00,d7,00,20,00,3
000000b0h: 33 2C 30 30 2C 32 30 2C 30 30 2C 33 64 2C 30 30 ; 3,00,20,00,3d,00
000000c0h: 2C 5C 0D 0A 20 20 32 30 2C 30 30 2C 33 36 2C 30 ; ,\.. 20,00,36,0
000000d0h: 30 2C 32 30 2C 30 30 2C 62 35 2C 30 30 2C 37 33 ; 0,20,00,b5,00,73
000000e0h: 2C 30 30 2C 30 30 2C 30 30 2C 34 31 2C 30 30 2C ; ,00,00,00,41,00,
000000f0h: 32 30 2C 30 30 2C 33 64 2C 30 30 2C 32 30 2C 30 ; 20,00,3d,00,20,0
00000100h: 30 2C 63 30 2C 30 33 2C 32 30 2C 30 30 2C 64 37 ; 0,c0,03,20,00,d7
00000110h: 2C 5C 0D 0A 20 20 30 30 2C 32 30 2C 30 30 2C 37 ; ,\.. 00,20,00,7
00000120h: 32 2C 30 30 2C 62 32 2C 30 30 2C 30 30 2C 30 30 ; 2,00,b2,00,00,00
00000130h: 2C 30 30 2C 30 30 0D 0A 0D 0A ; ,00,00....
导入此注册表文件会在Windows注册表中生成Unicode字符串:
2 ≠ 3
2 µs × 3 = 6 µs
A = À × r²
将二进制表示hex(1)
用于类型REG_SZ
的值不是标准的。此示例是由我手动创建的,用于演示可以使用非Unicode编码的注册表文件导入类型为REG_SZ
的Unicode字符串,该文件更易于在批处理文件中生成。
但是如果键或值的名称包含一个代码值大于U + 00FF的Unicode字符,则确实需要使用注册表文件格式 Windows注册表编辑器版本5.00 注册表文件也使用16位Unicode转换格式进行Unicode编码,并使用little-endian格式。
请参阅功能GetStringFromRegHex.js了解十六进制(?)... REG _ ?注册表类型表。
顺便说一下:我写了一次UltraEdit脚本{{3}}来获取类型为hex(2)
的十六进制值... REG_EXPAND_SZ
和hex(7)
... {{1在文本编辑器UltraEdit中打开的注册表文件中选择显示为文本,因为十六进制值非常难以读作文本&#34;为了人类。
命令行
REG_MULTI_SZ
使用注册表文件格式4将整个Windows注册表导出到ANSI桌面。
没有选项%SystemRoot%\System32\regedit.exe /a /e "%USERPROFILE%\Desktop\EntireWindowsRegistry.reg"
的同一命令行导致使用注册表文件格式5以Unicode格式导出整个Windows注册表。