如何从命令行向注册表添加多行REG_SZ字符串?

问题描述 投票:5回答:3

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

该条目适用于第三方应用,因此格式已修复。

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

我遇到了一些问题。

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

第二次尝试使用命令REG ADD,但无论如何我找不到添加换行符,我尝试的所有内容最后添加了一个文字字符串。

windows registry batch-file
3个回答
2
投票

您可以创建一个VBScript(.vbs)文件,只需从批处理文件中调用它,假设您在批处理中执行其他操作而不是此注册表更改。在vbscript中你会看到类似的东西:

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

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


2
投票

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

Registry.CurrentUser.OpenSubKey(@"software\classes\something", true).SetValue("some key", "sometext\nothertext", RegistryValueKind.String);

2
投票

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

1st Line
2nd Line

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

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Environment]
"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代码值后面添加一个空字节。 REG_SZ值必须以UTF-16LE表示法中的空字符(,00,00)终止。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.