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

Como modifico os dados de um valor chave de registo existente de cmd?

Como modifico um valor chave de registo existente de cmd?

Existem muitas opções e interruptores, campainhas e apitos, para o comando Reg. Existem opções para consultar, adicionar e apagar chaves, subchaves e nomes de valores. Mas como se modifica os dados de um nome de valor existente? Você remove completamente o nome do valor, e depois adiciona-o novamente e reescreve o valor/dados modificados? Isso parece muito complicado…

Não estou interessado em nenhuma automatização de script/batch, pelo menos não agora, só quero uma simples edição de registo através do comando Reg cmd. Sem a necessidade de destruir uma chave apenas para a adicionar um segundo mais tarde com alguns dados adicionais. O mesmo tipo de operação que pode fazer em Regedit.

Aqui está um exemplo para estimular o processo de pensamento.

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

Agora este está óptimo, mas e se eu tiver de alterar os dados de valor de “verdadeiro” para “falso”. Para que eu tenha isto:

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 de cmd?….

Update:

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

No exemplo acima posso simplesmente 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 dar-me ao luxo de apagar completamente o valor, e depois adicioná-lo novamente, porque os dados contidos nele são muito pequenos. É apenas uma string como “verdadeiro” ou “falso”. Isso não é muito difícil de recriar.

Aqui está um exemplo mais duro** 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 é que se lida com este??…

Não espera que eu volte a escrever tudo isto?…..

Respostas (2)

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

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 anexa alguma string antes de o escrever de volta:

&001

Note: Esta amostra assume que o valor antigo e o novo valor não têm espaços em branco. Caso contrário é necessário adicionar aspas e alterar o parâmetro “tokens”. Omitida verificação de erro extra para brevidade. No entanto, todos os códigos de manipulação de registo devem definitivamente fazer uma verificação de erros adequada.

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

Pode também REG import foo.reg em que foo.reg é um ficheiro contendo a informação de registo habitual, uma vez que exportaria de regedit.exe.

No seu exemplo, isto 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ção disponível em este artigo da Microsoft Technet .