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


19

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

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

No estoy interesado en ningún script / automatización por lotes, al menos no ahora, solo quiero editar el registro simple a través del comando cmd Reg. Sin la necesidad de destruir una clave solo para agregarla un segundo más tarde con algunos datos adicionales. El mismo tipo de operación que puedes hacer en Regedit.

Aquí hay un ejemplo para estimular el proceso de pensamiento.

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

Ahora bien, este está bien, pero ¿y si debo cambiar los datos del valor de "verdadero" a "falso"? Para que obtenga 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 desde cmd? ....

Actualizar:

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

En el ejemplo anterior, solo 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 eliminar completamente el valor y luego agregarlo nuevamente, porque los datos que contiene son muy pequeños. Es solo una cadena como "verdadero" o "falso". Eso no es demasiado difícil de recrear.

Aquí hay un ejemplo más difícil 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 solo partes del contenido de datos. Específicamente, solo quiero eliminar la última ruta de búsqueda, C: \ Archivos de programa (x86) \ Notepad ++.

¿Cómo abordas este?

No esperas que vuelva a escribir todo esto ...


¿Su pregunta es específicamente sobre la edición de RUTA desde la línea de comando, o algún valor? Además, reemplazar o agregar / anteponer a cualquier valor de registro es fácil, pero modificar / eliminar partes de un valor requerirá más esfuerzo.
Karan

Respuestas:


37

Use REG ADDcon el parámetro "/ f" para forzar la sobrescritura.

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 "\0" 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 alternar un valor de cadena de "falso" a "verdadero", use un comando como este:

reg add HKCU\Software\Citrix\Receiver /t REG_SZ /v UpgradeDone /d true /f

Ejemplo que lee un valor existente y agrega una cadena antes de volver a escribirlo:

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

Nota: Esta muestra supone que el valor anterior y el nuevo valor no tienen espacios en blanco. De lo contrario, hay que agregar comillas y cambiar el parámetro "tokens". Se omitió la comprobación adicional de errores por brevedad. Sin embargo, todo el código de manipulación del registro definitivamente debe realizar una verificación de errores adecuada.


Entonces ... ¿forzar una "sobrescritura" realmente agrega datos al nombre del valor? ... No sobrescribe los datos existentes ?? ...
Samir

Entonces, usando mi segundo ejemplo anterior, ¿estás diciendo que puedo hacer reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment /v Path /d ;C:\Program Files (x86)\Some_software /fpara agregar ;C:\Program Files (x86)\Some_softwareal final de la cadena?
Samir

No, "REG / ADD" simplemente inserta o sobrescribe. Para agregar, debe "REG / QUERY" el valor, calcular el valor deseado y "REG / ADD" de nuevo.
Axel Kemper

Sí, este parece ser el caso. Acabo de intentar esto. reg add HKEY_CURRENT_USER\Software\Citrix\Receiver /v UpgradeDone /t Reg_Sz /d false Valor UpgradeDone existe, sobrescribir (Sí / No)? Entonces, sin el modificador / f, le preguntará si desea sobrescribir.
Samir

¿Puede explicar cómo agregar datos a un nombre de valor existente? ¿Qué quieres decir con "cálculo"?
Samir

2

También puede ver REG import foo.regqué foo.regarchivo contiene la información de registro habitual desde la que exportaría regedit.exe.

En su 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 .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.