¿Cómo agrego una cadena REG_SZ multilínea al registro desde la línea de comandos?

StackOverflow https://stackoverflow.com/questions/153879

  •  03-07-2019
  •  | 
  •  

Pregunta

Como parte de una configuración de compilación en una máquina con 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 debe contener nuevas líneas, es decir. 0xOA caracteres como separadores.

He encontrado algunos problemas.

El primer intento utilizó regedit para cargar un archivo .reg generado. Esto falló, ya que no parecía gustarles ni las cuerdas largas ni las cuerdas 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 Win32.

El segundo intento usó el comando REG AGREGAR, pero no puedo encontrar de todos modos para agregar los caracteres de nueva línea, todo lo que intento simplemente termina con una cadena literal que se agrega.

¿Fue útil?

Solución

Puede crear un archivo VBScript (.vbs) y llamarlo desde un archivo por lotes, suponiendo que está haciendo otras cosas en el lote que no sea este cambio de registro. En vbscript estarías viendo algo como:

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

Debería poder encontrar los posibles valores de tipo utilizando Google.

Otros consejos

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 importar cadenas REG_SZ multilínea que contengan saltos de retorno de carro (CR) y de salto de línea (LF) en el registro usando archivos .reg siempre que no le importe traducir el texto como UTF-16LE Datos codificados hexadecimales. 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 después de cada valor de código ASCII. Los valores de 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 es particularmente útil agregar dichos datos a las variables de entorno. Uno puede usar RegEdit para verificar que los datos REG_SZ importados contienen los caracteres CRLF.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top