windows - tag - ¿Cómo agrego una cadena REG_SZ de línea múltiple al registro desde la línea de comando?
tag folders (3)
Como parte de una configuración de compilación en una máquina de Windows, necesito agregar una entrada de registro y me gustaría hacerlo desde un simple archivo por lotes.
La entrada es para una aplicación de terceros, por lo que el formato es fijo.
La entrada toma la forma de una cadena REG_SZ pero necesita contener líneas nuevas, es decir. 0xOA caracteres como separadores.
He golpeado algunos problemas.
Primer intento utilizado regedit para cargar un archivo .reg generado. Esto falló, ya que no parecía gustar ni cadenas largas ni cadenas con líneas nuevas. Descubrí que la exportación funciona bien. La importación falla. Pude probar la exportación ya que la aplicación de terceros agrega entradas similares directamente a través de la API de Win32.
El segundo intento usó el comando REG ADD pero no puedo encontrar de todos modos para agregar los charcters de la nueva línea, todo lo que intento simplemente termina con una cadena literal que se agrega.
¿Algunas ideas?
Si no está limitado a un lenguaje de scripting, puede hacerlo en C # con
Registry.CurrentUser.OpenSubKey(@"software/classes/something", true).SetValue("some key", "sometext/nothertext", RegistryValueKind.String);
Puede crear un archivo VBScript (.vbs) y simplemente llamarlo desde un archivo por lotes, suponiendo que está haciendo otras cosas en el lote que no sea este cambio en el registro. En vbscript estarías mirando algo así como:
Debería poder encontrar los posibles valores de tipo usando google. set WSHShell = CreateObject("WScript.Shell")
WSHShell.RegWrite "HKEY_LOCAL_MACHINE/SOMEKEY", "value", "type"
Puede importar cadenas REG_SZ multilínea que contengan saltos de final de línea (EOL) de retorno de carro (LF) y avance de línea (LF) en el registro utilizando archivos .reg siempre que no le importe traducir el texto como datos codificados hexadecimales UTF-16LE . Para importar un REG_SZ con este texto:
1st Line 2nd Line
Puede crear un archivo llamado MULTILINETEXT.REG que contenga esto:
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
Para codificar ASCII en UTF-16LE, simplemente agregue un byte nulo siguiendo cada valor de código ASCII. Los valores REG_SZ deben terminar con un carácter nulo ( ,00,00
) en notación UTF-16LE.
Importe el cambio de registro en el archivo por lotes REG.EXE IMPORT MULTILINETEXT.REG
.
El ejemplo utiliza la clave de entorno porque es conveniente, no porque sea particularmente útil agregar dichos datos a las variables de entorno. Se puede usar RegEdit para verificar que los datos REG_SZ importados contengan los caracteres CRLF.