7

作为 Windows 机器上构建设置的一部分,我需要添加一个注册表项,我想从一个简单的批处理文件中完成。

该条目适用于第三方应用程序,因此格式是固定的。

该条目采用 REG_SZ 字符串的形式,但需要包含换行符,即。0xOA 字符作为分隔符。

我遇到了一些问题。

第一次尝试使用 regedit 加载生成的 .reg 文件。这失败了,因为它似乎既不喜欢长字符串也不喜欢带有换行符的字符串。我发现导出工作正常导入失败。我能够测试导出,因为第三方应用程序直接通过 win32 api 添加了类似的条目。

第二次尝试使用命令 REG ADD 但我无论如何都找不到添加换行符我尝试的所有内容都以添加文字字符串结束。

4

3 回答 3

3

如果您不受脚本语言的限制,您可以在 C# 中使用

Registry.CurrentUser.OpenSubKey(@"software\classes\something", true).SetValue("some key", "sometext\nothertext", RegistryValueKind.String);
于 2008-09-30T17:18:04.880 回答
3

您可以使用 .reg 文件将包含回车符 (CR) 和换行符 (LF) 换行符 (EOL) 的多行 REG_SZ 字符串导入注册表,只要您不介意将文本翻译为 UTF-16LE 十六进制编码数据. 要使用此文本导入 REG_SZ:

第一行
第二行

您可以创建一个名为 MULTILINETEXT.REG 的文件,其中包含以下内容:

Windows 注册表编辑器版本 5.00

[HKEY_CURRENT_USER\环境]
"MULTILINETEXT"=hex(1):31,00,73,00,74,00,20,00,4c,00,69,00,6e,00,65,00,0d,00,0a,00,\
32,00,6e,00,64,00,20,00,4c,00,69,00,6e,00,65,00,0d,00,0a,00,\
00,00

要将 ASCII 编码为 UTF-16LE,只需在每个 ASCII 代码值之后添加一个空字节。,00,00REG_SZ 值必须以 UTF-16LE 表示法中的空字符 ( ) 结尾。

在批处理文件中导入注册表更改REG.EXE IMPORT MULTILINETEXT.REG

该示例使用 Environment 键是因为它方便,而不是因为将此类数据添加到环境变量中特别有用。可以使用 RegEdit 来验证导入的 REG_SZ 数据是否包含 CRLF 字符。

于 2012-11-06T16:22:23.473 回答
2

您可以创建一个 VBScript(.vbs) 文件并从批处理文件中调用它,假设您在批处理中执行此注册表更改以外的其他操作。在 vbscript 中,您将看到如下内容:

set WSHShell = CreateObject("WScript.Shell")  
WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SOMEKEY", "value", "type"

您应该能够使用 Google 找到可能的类型值。

于 2008-09-30T16:50:16.290 回答