Excluir chave ou valor do registro por meio de um script CMD?

18

Como edito um .cmdarquivo de script já em produção , para que o script exclua uma certa chave do Registro no registro do Windows?

Em primeiro lugar, isso é possível e, em segundo lugar (se isso não for possível), eu poderia criar um .regarquivo e executá-lo com o .cmdarquivo?

De dentro do .cmdscript, ele não está funcionando:

del "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CurrentVersion\SampleKey]"

Este método também não funcionou para mim:

cmd "\\networkdrive\regfiles\deleteSampleKey.reg"

Então, de dentro do .regarquivo:

Windows Registry Editor Version 5.00
[
-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
]
Derek
fonte
1
usando um arquivo .reg, mesmo a partir de uma unidade de rede deve funcionar bem. Se não for, espero que seja o UAC ou outras medidas de segurança.
William Hilsum

Respostas:

26

Eu recomendaria usar o comando REG , em vez de criar e importar arquivos .reg.

reg delete "HKCU\Some\Registry\Path" /f

ou

reg delete "HKLM\Some\Registry\Path" /f

Esses comandos podem ser inseridos diretamente no .cmdarquivo batch ( ).

Patrick Seymour
fonte
15

Conforme descrito aqui e aqui pela Microsoft em "Removendo entradas do Registro", você pode remover uma chave colocando um sinal de menos "-" na frente de uma chave assim:

[-HKEY_LOCAL_MACHINE\SOFTWARE\YourSoft\MyKey]

E para remover uma entrada , coloque um sinal de menos "-" após o = char assim:

[HKEY_LOCAL_MACHINE\SOFTWARE\YourSoft\MyKey]
"MyEntry"=-

Nota: Essas são apenas chaves de exemplo. Eles não vão realmente funcionar.

Bruno Bieri
fonte
De fato, funciona.
Peter Mortensen
1
Outra referência é como adicionar, modificar ou excluir subchaves e valores do Registro usando um arquivo .reg (Microsoft, KB 310516).
Peter Mortensen
@ Peter Mortensen Esta é uma referência ainda mais oficial. Obrigado por compartilhar.
Bruno Bieri
Ironicamente, o link de suporte da Microsoft atualmente fornece "Erro de servidor no aplicativo '/ app / content'".
Sdjuan
@sdjuan o link Microsoft Support funciona novamente.
Bruno Bieri
4

Eu evitaria usar outro script, pois você pode fazer isso em um arquivo .cmd usando os comandos REG .

Você pode fazer algo semelhante a isto:

REG DELETE "HKEY_CURRENT_USER\SOFTWARE\SomeProgram"

Se você deseja excluir apenas entradas específicas, adicione um /v "EntryName"argumento após o caminho para a chave. Por exemplo:

REG DELETE "HKEY_CURRENT_USER\SOFTWARE\SomeProgram" /v "EntryName"

Ambos causarão um aviso antes de excluir os valores. Para evitar isso, você deve usar o /fargumento no final.

REG DELETE "HKEY_CURRENT_USER\SOFTWARE\SomeProgram" /f
Marko Vejnovic
fonte
Obrigado. O único lugar na rede que pude encontrar que faz referência a uma subchave.
square_eyes 23/03
3

Eu uso o seguinte método. Isso faz parte de um rasgador MRU para Windows XP, que pode ajudar. Este é o texto de um arquivo em lotes, executado a partir do CMD ou de um atalho. Ele cria um arquivo de registro usando redirecionamentos de eco simples e depois o importa.

REM *** START REGISTRY SHREDDER ***
ECHO CREATING MRU REGISTRY
ECHO .
 ECHO > "%TMP%\MRUKILL.reg" Windows Registry Editor Version 5.00
ECHO >> "%TMP%\MRUKILL.reg" [-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Doc Find Spec MRU]
ECHO >> "%TMP%\MRUKILL.reg" [-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FindComputerMRU]

REM ***  IMPORT THAT REG TO WIPE OUT THEM KEYS AND VALUES ****
regedit "%TMP%\MRUKILL.reg"

Eu não sou um codificador, apenas faço algumas coisas em lote para mim, então nem sempre consigo ler o que escrevi, mas usaria isso como um modelo para fazer outra coisa.

Eles echossão redirecionados ( >) para um arquivo, com o único >para o primeiro redirecionamento, e >>anexados ao mesmo arquivo. O -sinal é usado para remover uma entrada do Registro. Provavelmente seria bom deixar a última linha e exibir o arquivo que ele criou antes da importação. A importação pode ser feita silenciosamente, mas eu não farei isso sozinho.

Isenção de responsabilidade: Como uma pessoa pode causar sérios danos ao sistema, removendo entradas do Registro, é necessário um backup de imagem de disco que possa retornar o sistema quando o sistema falhar.

Permissões, elevações e algumas entradas apropriadas no registro não permitirão apenas que o usuário as destrua, sem definir as permissões, devido à sua importância.

Aqui está uma parte "pergunte ao usuário", adicionada apenas por diversão.

ECHO
 REM *** ASK the USER FIRST ***  
ECHO  DO YOU WANT TO DELETE REGISTRY MRUS?
SET /P Choice2=type "Y" to Mangle your registry, - -
ECHO . 
IF /I "%Choice2%"=="Y" GOTO SHREDD
ECHO OK WELL THEN I WON'T
ECHO By By 
   REM *** USER DECIDED AGAINST IT ***
ECHO .
PAUSE
GOTO FINISH
Psycogeek
fonte
1
no Vista + esse método invocará o UAC. e o usuário terá que aceitar ou recusar esta ação. Executando o script como administrador irá ignorar que, embora
Piotr Kula
1
você não deve usar% USERPROFILE% \ Configurações locais \ Temp, mas% TMP%. O primeiro funciona apenas nos sistemas de inglês
kinokijuf
@kinokijuf Feexed, parece muito melhor assim também. Provavelmente foi definido assim para mantê-lo no disco do sistema para mim, porque às vezes enviei o Temps para ramdisk ou para discos de dados.
Psycogeek 19/01/12
1

Estou usando o Windows 7 e é isso que obtive no CMD:

Fri 08/08/2014  8:13:51.72 | C:\Users\MrCMD
>reg.exe delete /?

REG DELETE KeyName [/v ValueName | /ve | /va] [/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.

  ValueName  The value name, under the selected Key, to delete.
             When omitted, all subkeys and values under the Key are deleted.

  /ve        delete the value of empty value name (Default).

  /va        delete all values under this key.

  /f         Forces the deletion without prompt.

Examples:

  REG DELETE HKLM\Software\MyCo\MyApp\Timeout
    Deletes the registry key Timeout and its all subkeys and values

  REG DELETE \\ZODIAC\HKLM\Software\MyCo /v MTU
    Deletes the registry value MTU under MyCo on ZODIAC

Ou, acho que podemos EXCLUIR algumas chaves ou MODIFICAR alguns valores por este algoritmo:

  1. Exporte o local do registro de chaves / valores que queremos excluir / modificar em um arquivo (File01.reg).
  2. Edite / modifique a chave / valor apropriado e salve no novo arquivo (File02.reg).
  3. Importe esse arquivo modificado (File02.reg) para o Registro do Windows.

Referência ao registro EXPORT.

Fri 08/08/2014  8:24:53.19 | C:\Users\mardir01
>reg.exe export /?

REG EXPORT KeyName FileName [/y]

  Keyname    ROOTKEY[\SubKey] (local machine only).
    ROOTKEY  [ HKLM | HKCU | HKCR | HKU | HKCC ]
    SubKey   The full name of a registry key under the selected ROOTKEY.

  FileName   The name of the disk file to export.

  /y       Force overwriting the existing file without prompt.

Examples:

  REG EXPORT HKLM\Software\MyCo\MyApp File01.reg
    Exports all subkeys and values of the key MyApp to the file File01.reg

Referência ao registro IMPORT.

>reg.exe import /?

REG IMPORT FileName

  FileName  The name of the disk file to import (local machine only).

Examples:

  REG IMPORT File02.reg
    Imports registry entries from the file File02.reg

Idéias mais brilhantes para melhoria são bem-vindas. :) :) :)

Rhak Kahr
fonte