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

17

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

Existem muitas opções e opções, sinos e apitos, 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 depois o adiciona novamente e redigita o valor / dados modificados? Isso parece muito complicado ...

Eu não estou interessado em qualquer script / automação de lote, pelo menos não agora, eu só quero edição de registro simples e simples através do comando cmd Reg. Sem a necessidade de destruir uma chave só para adicioná-lo 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 é bom, mas e se eu precisar alterar os dados do valor de "true" para "false"? Então eu recebo 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 a sintaxe para fazer isso a partir do cmd? ....

Atualização:

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

No exemplo acima, posso 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

Eu posso permitir a exclusão completa do 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.

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

Eu quero remover apenas partes do conteúdo dos dados. Especificamente, eu só quero remover o último caminho de pesquisa, o C: \ Program Files (x86) \ Notepad ++.

Como você lida com este? ...

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

    
por Samir 14.06.2013 / 11:06

2 respostas

30

Use REG ADD com o parâmetro "/ f" para forçar a sobregravaçã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 "
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 inserir um novo valor ou alternar um valor de string de "false" para "true", use um comando como este:

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

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

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

Nota: Esta amostra assume que o valor antigo e o novo valor não possuem espaços em branco. Caso contrário, é necessário adicionar cotas e alterar o parâmetro "tokens". Verificação de erro extra omitida por brevidade. No entanto, o código de manipulação do registro all definitivamente deve fazer uma verificação de erros adequada.

    
por 14.06.2013 / 11:27
2

Você também pode REG import foo.reg , em que foo.reg é um arquivo contendo as informações de registro usuais que você exportaria de regedit.exe .

No seu exemplo, 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 em este artigo da Microsoft Technet .

    
por 14.04.2015 / 01:01