作为Windows机器上的构建设置的一部分,我需要添加一个注册表项,我想从一个简单的批处理文件中完成它。
该条目适用于第三方应用,因此格式已修复。
该条目采用REG_SZ字符串的形式,但需要包含换行符,即。 0xOA字符作为分隔符。
我遇到了一些问题。
第一次尝试使用regedit加载生成的.reg文件。这失败了,因为它似乎不喜欢长字符串或带换行符的字符串。我发现导出工作正常导入失败。我能够测试导出,因为第三方应用程序直接通过win32 api添加类似的条目。
第二次尝试使用命令REG ADD,但无论如何我找不到添加换行符,我尝试的所有内容最后添加了一个文字字符串。
您可以创建一个VBScript(.vbs)文件,只需从批处理文件中调用它,假设您在批处理中执行其他操作而不是此注册表更改。在vbscript中你会看到类似的东西:
set WSHShell = CreateObject("WScript.Shell")
WSHShell.RegWrite "HKEY_LOCAL_MACHINE\SOMEKEY", "value", "type"
您应该能够使用Google找到可能的类型值。
如果您不受限于脚本语言,可以在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:
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字符。