如何从命令行添加多行REG_SZstring到registry?

作为一个Windows机器上的生成设置的一部分,我需要添加一个registry项,我想从一个简单的batch file

该条目是为第三方应用程序,所以格式是固定的。

该条目采取REG_SZstring的forms,但需要包含换行符,即。 0xOA字符作为分隔符。

我遇到了一些问题。

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

第二次尝试使用命令REG ADD,但我无法find任何添加新行charcters所有我尝试只是结束了一个文字string被添加。

有任何想法吗?

您可以创建一个VBScript(.vbs)文件,并从一个批处理文件中调用它,假设除了这个注册表更改外,您还在批处理其他内容。 在VBScript中,你会看到像这样的东西:
set WSHShell = CreateObject("WScript.Shell")
WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SOMEKEY", "value", "type"

你应该能够找到可能的类型值使用谷歌。

如果你不受限于脚本语言,你可以用C#来完成

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

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

第一线
第二条线

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

 Windows注册表编辑器版本5.00

 [HKEY_CURRENT_USER \环境]
 “MULTILINETEXT”=十六进制(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字符。