¿Eliminar clave o valor de registro mediante un script CMD?

18

¿Cómo edito un .cmdarchivo de script que ya está en producción para que el script elimine una determinada clave de registro en el registro de Windows?

En primer lugar, ¿es esto posible? Y en segundo lugar (si eso no es posible), ¿podría crear un .regarchivo y ejecutar ese archivo con el .cmdarchivo?

Desde dentro del .cmdscript, no funciona:

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

Este método tampoco me ha funcionado:

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

Luego desde dentro del .regarchivo:

Windows Registry Editor Version 5.00
[
-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
]
Derek
fuente
1
utilizando un archivo .reg, incluso desde una unidad de red debería funcionar bien. Si no es así, entonces espero que se deba a UAC u otras medidas de seguridad.
William Hilsum

Respuestas:

26

Recomendaría usar el comando REG , en lugar de crear e importar archivos .reg.

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

o

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

Estos comandos se pueden ingresar directamente en el .cmdarchivo por lotes ( ).

Patrick Seymour
fuente
15

Como se describe aquí y aquí por Microsoft en "Eliminar entradas de registro", puede eliminar una clave colocando un signo menos "-" delante de una clave como esa:

[-HKEY_LOCAL_MACHINE\SOFTWARE\YourSoft\MyKey]

Y para eliminar una entrada , coloque un signo menos "-" después de = char así:

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

Nota: Esas son solo claves de ejemplo. En realidad no funcionarán.

Bruno Bieri
fuente
De hecho, funciona.
Peter Mortensen
@ Peter Mortensen Esta es incluso una referencia más oficial. Gracias por compartir.
Bruno Bieri
Irónicamente, ese enlace de soporte de Microsoft actualmente ofrece "Error de servidor en la aplicación '/ app / content'".
sdjuan
@sdjuan, el enlace de Soporte de Microsoft funciona nuevamente.
Bruno Bieri
4

Evitaría usar otro script ya que puedes hacerlo en un archivo .cmd usando los comandos REG .

Puedes hacer algo similar a esto:

REG DELETE "HKEY_CURRENT_USER\SOFTWARE\SomeProgram"

Si desea eliminar solo entradas específicas, debe agregar un /v "EntryName"argumento después de la ruta a la clave. P.ej:

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

Ambos harán que se emita una advertencia antes de eliminar los valores. Para evitar eso, debes usar el /fargumento al final.

REG DELETE "HKEY_CURRENT_USER\SOFTWARE\SomeProgram" /f
Marko Vejnovic
fuente
Gracias. El único lugar en la red que pude encontrar que hace referencia a una subclave.
square_eyes
3

Yo uso el siguiente método. Esto es parte de un destripador MRU para Windows XP, que podría ayudar. Este es el texto de un archivo por lotes, que se ejecuta desde CMD o desde un acceso directo. Crea un archivo de registro usando redirecciones de eco simples, luego lo 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"

No soy un programador, solo hago algunas cosas por lotes, por lo que a menudo ni siquiera puedo leer lo que escribí, pero lo usaría como plantilla para hacer otra cosa.

Se echosredirigen ( >) a un archivo, con el único >para la primera redirección, y >>para agregar al mismo archivo. El -signo se usa para eliminar una entrada de registro. Probablemente sería bueno dejar la última línea y ver el archivo que creó antes de importar. La importación se puede hacer en silencio, pero no lo haré yo mismo.

Descargo de responsabilidad: debido a que una persona puede causar daños graves al sistema al eliminar las entradas del registro, es necesaria una copia de seguridad de la imagen del disco que puede devolver el sistema cuando el sistema falla.

Los permisos adecuados, las elevaciones y algunas entradas en el registro no solo permitirán al usuario destruirlos, sin establecer los permisos, debido a su importancia.

Aquí hay una parte de "preguntar al usuario", agregada solo por diversión.

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
fuente
1
en Vista + este método invocará UAC. y el usuario tendrá que aceptar o rechazar esta acción. Sin embargo
Piotr Kula el
1
no debe usar% USERPROFILE% \ Configuración local \ Temp, sino% TMP%. los antiguos sólo funciona en sistemas en inglés
kinokijuf
@kinokijuf Feexed, también se ve mucho mejor. Probablemente se configuró así para mantenerlo en el disco del sistema para mí, porque a veces he enviado Temps a un disco RAM o a discos de datos.
Psycogeek
1

Estoy usando Windows 7 y esto es lo que obtuve a través de 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

O, creo que podemos ELIMINAR algunas teclas o MODIFICAR algunos valores mediante este algoritmo:

  1. Exporte la ubicación del registro de claves / valores que queremos eliminar / modificar en un archivo (File01.reg).
  2. Edite / modifique la clave / valor apropiado y guárdelo en un nuevo archivo (File02.reg).
  3. Importe ese archivo modificado (File02.reg) en el Registro de Windows.

Referencia al registro de 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

Referencia al registro de 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

Ideas más brillantes para mejorar son bienvenidas. :) :) :)

Rhak Kahr
fuente