Como modifico os dados de um nome de valor da chave de registro existente do cmd?

19

Como modifico um valor de chave de registro existente do cmd?

Existem muitas opções e opções, sinos e assobios, para o comando Reg. Existem opções para consultar, adicionar e excluir chaves, subchaves e nomes de valores. Mas como você modifica os dados de um nome de valor existente? Você remove completamente o nome do valor e o adiciona novamente e redigita o valor / dados modificados? Isso parece muito complicado ...

Não estou interessado em nenhuma automação de script / lote, pelo menos não agora, só quero uma edição simples e simples do registro através do comando cmd Reg. Sem a necessidade de destruir uma chave, basta adicioná-la um segundo depois com alguns dados adicionais. O mesmo tipo de operação que você pode fazer no Regedit.

Aqui está um exemplo para você estimular o processo de raciocínio.

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

Agora, este está bem, mas e se eu precisar alterar os dados do valor de "true" para "false". Para que eu entenda isso:

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

Quais são as opções e sintaxe para fazer isso no cmd? ....

Atualizar:

Acabei de perceber agora que o exemplo acima pode ter sido fácil demais ...

No exemplo acima, posso apenas fazer o seguinte:

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

Posso me permitir excluir completamente o valor e adicioná-lo novamente, porque os dados contidos nele são muito pequenos. É apenas uma string como "true" ou "false". Isso não é muito difícil de recriar.

Aqui está um exemplo mais difícil com mais conteúdo de dados:

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++

Quero remover apenas partes do conteúdo dos dados. Especificamente, quero remover apenas o último caminho de pesquisa, o C: \ Arquivos de Programas (x86) \ Notepad ++.

Como você lida com este ?? ...

Você não espera que eu digite novamente tudo isso ?? ......

Samir
fonte
Sua pergunta é especificamente sobre a edição de PATH na linha de comando ou algum valor? Além disso, é fácil substituir ou acrescentar / acrescentar a qualquer valor de registro, mas modificar / excluir partes de um valor exigirá mais esforço.
precisa

Respostas:

36

Use REG ADDcom o parâmetro "/ f" para forçar a substituição.

REG ADD /? explica os 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 inserir um novo valor ou alternar um valor de string de "false" para "true", use um comando como este:

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

Exemplo que lê um valor existente e acrescenta alguma string antes de escrevê-la novamente:

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 amostra supõe que o valor antigo e o novo valor não tenham espaços em branco. Caso contrário, é necessário adicionar aspas e alterar o parâmetro "tokens". Verificação de erro extra omitida por questões de concisão. No entanto, todo o código de manipulação de registro definitivamente deve fazer uma verificação de erro adequada.

Axel Kemper
fonte
? Então ... forçando uma "substituir" realmente acrescenta dados para o nome do valor ... Ele não substituir os dados existentes ?? ...
Samir
Então, usando meu segundo exemplo acima, você está dizendo que eu posso fazer reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment /v Path /d ;C:\Program Files (x86)\Some_software /fpara acrescentar ;C:\Program Files (x86)\Some_softwareao final da string?
Samir,
Não, "REG / ADD" apenas insere ou substitui. Para acrescentar, você teria que "REG / QUERY" o valor, calcule o valor desejado e "REG / ADD" de volta.
precisa
Sim, este parece ser o caso. Eu apenas tentei isso. reg add HKEY_CURRENT_USER\Software\Citrix\Receiver /v UpgradeDone /t Reg_Sz /d false Valor UpgradeDone existe, substituir (Sim / Não)? Portanto, sem a opção / f, ele perguntará se você deseja substituir.
Samir
Você pode explicar como anexar dados a um nome de valor existente? O que você quer dizer com "computação"?
Samir
2

Pode também REG import foo.regem que foo.regé um arquivo contendo as informações do Registro de costume como você exportar a partir regedit.exe.

No seu exemplo, isso seria 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++"

Mais informações disponíveis neste artigo da Microsoft Technet .

Andy Terra
fonte