2013-06-14 09:06:20 +0000 2013-06-14 09:06:20 +0000
21
21

¿Cómo modifico los datos de un nombre de valor de clave de registro existente desde el cmd?

¿Cómo modifico un valor de clave de registro existente desde el cmd?

Hay muchas opciones e interruptores, campanas y silbatos, para el comando Reg. Hay opciones para consultar, añadir y eliminar claves, subclaves y nombres de valores. ¿Pero cómo se modifican los datos de un nombre de valor existente? ¿Quita completamente el nombre del valor, y luego lo agrega de nuevo y vuelve a escribir el valor/datos modificados? Eso parece muy engorroso…

No estoy interesado en ninguna automatización de script/batch, al menos no ahora, sólo quiero una simple edición de registro a través del comando cmd Reg. Sin necesidad de destruir una clave sólo para añadirla un segundo después con algunos datos adicionales. El mismo tipo de operación que puedes hacer en Regedit.

Aquí hay un ejemplo para que estimule el proceso de pensamiento.

Key: HKEY_CURRENT_USER\Software\Citrix\Receiver
Value type: reg_sz
Value name: UpgradeDone
Value data: true

Ahora este está bien, pero qué pasa si debo cambiar el valor de los datos de “true” a “false”. De modo que obtengo esto en su lugar:

Key: HKEY_CURRENT_USER\Software\Citrix\Receiver
Value type: reg_sz
Value name: UpgradeDone
Value data: false

¿Cuáles son las opciones y la sintaxis para hacer eso de cmd?…

Actualizar:

Me acabo de dar cuenta ahora que el ejemplo anterior podría haber sido demasiado fácil. ..

En el ejemplo anterior sólo puedo hacer lo siguiente:

reg delete HKEY_CURRENT_USER\Software\Citrix\Receiver /v UpgradeDone

reg add HKEY_CURRENT_USER\Software\Citrix\Receiver /v UpgradeDone /t Reg_Sz /d false

Puedo permitirme borrar completamente el valor, y luego agregarlo de nuevo, porque los datos que contiene son muy pequeños. Es sólo una cadena como “verdadero” o “falso”. Eso no es muy difícil de recrear.

Aquí hay un ejemplo más duro con más contenido de datos:

Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Value name: Path
Value type: Reg_Sz
Data: C:\Program Files (x86)\ImageMagick-6.8.5-Q16;C:\PROGRA~2\GTK2-R~1\bin;C:\Program Files (x86)\AMD APP\bin\x86_64;C:\Program Files (x86)\AMD APP\bin\x86;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;C:\Windows\System32\WindowsPowerShell\v1.0\;"C:\Program Files (x86)\WinHasher";C:\Program Files (x86)\Android\android-sdk\tools\;C:\Program Files (x86)\Android\android-sdk\platform-tools\;C:\Program Files (x86)\GTK2-Runtime\bin;C:\Program Files (x86)\MiKTeX 2.9\miktex\bin\;C:\Program Files (x86)\Common Files\Teleca Shared;C:\Program Files (x86)\Notepad++

Quiero eliminar sólo partes del contenido de los datos. Específicamente, sólo quiero eliminar la última ruta de búsqueda, el C:\Ficheros de Programa (x86)\N-Notepad++.

¿Cómo abordas este?…

¿No esperas que vuelva a escribir todo esto?….

Respuestas (2)

38
38
38
2013-06-14 09:27:30 +0000

Use REG ADD con el parámetro “/f” para forzar la sobreescritura.

REG ADD /? explica los parámetros.

REG ADD KeyName [/v ValueName | /ve] [/t type] [/s Separator] [/d Data] [/f]

KeyName [\Machine\]FullKey

Machine Name of remote machine - omitting defaults to the current machine 
            Only HKLM and HKU are available on remote machines
FullKey ROOTKEY\SubKey ROOTKEY [HKLM | HKCU | HKCR | HKU | HKCC] SubKey 
            The full name of a registry key under the selected ROOTKEY
/v The value name, under the selected Key, to add
/ve adds an empty value name <no name> for the key
/t RegKey data types
            [ REG_SZ | REG_MULTI_SZ | REG_DWORD_BIG_ENDIAN | REG_DWORD | 
              REG_BINARY | REG_DWORD_LITTLE_ENDIAN | REG_NONE | REG_EXPAND_SZ ]
            If omitted, REG_SZ is assumed
/s Specify one character that you use as the separator in your data 
            string for REG_MULTI_SZ. If omitted, use "```
reg add HKCU\Software\Citrix\Receiver /t REG_SZ /v UpgradeDone /d true /f
```" as the separator
/d The data to assign to the registry ValueName being added
/f Force overwriting the existing registry entry without prompt

Para insertar un nuevo valor o cambiar un valor de cadena de “falso” a “verdadero”, utilice un comando como éste:

set append=XXXXXX
set key=HKCU\Software\myTest
set value=myValue
set oldVal=

for /F "skip=2 tokens=3" %%r in ('reg query %key% /v %value%') do set oldVal=%%r
echo previous=%oldVal%

set newVal=%oldVal%%append% 

reg add %key% /v %value% /d %newVal% /f

Ejemplo que lee un valor existente y añade alguna cadena antes de volver a escribirlo:

&001

Nota: Esta muestra asume que el valor antiguo y el nuevo no tienen espacios en blanco. De lo contrario, hay que añadir comillas y cambiar el parámetro “tokens”. Se ha omitido la comprobación de errores adicionales para mayor brevedad. Sin embargo, todos los códigos de manipulación del registro definitivamente deben hacer una adecuada comprobación de errores.

2
2
2
2015-04-13 23:01:03 +0000

También puedes REG import foo.reg en el que foo.reg es un archivo que contiene la información habitual del registro como exportarías desde regedit.exe.

En tu ejemplo, esto sería algo como:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]
"Path"="C:\Program Files (x86)\ImageMagick-6.8.5-Q16;C:\PROGRA~2\GTK2-R~1\bin;C:\Program Files (x86)\AMD APP\bin\x86_64;C:\Program Files (x86)\AMD APP\bin\x86;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;C:\Windows\System32\WindowsPowerShell\v1.0\;"C:\Program Files (x86)\WinHasher";C:\Program Files (x86)\Android\android-sdk\tools\;C:\Program Files (x86)\Android\android-sdk\platform-tools\;C:\Program Files (x86)\GTK2-Runtime\bin;C:\Program Files (x86)\MiKTeX 2.9\miktex\bin\;C:\Program Files (x86)\Common Files\Teleca Shared;C:\Program Files (x86)\Notepad++"

Más información disponible en este artículo de Microsoft Technet.