script reg query modify from examples batch bat windows batch-file cmd registry registrykey

windows - modify - reg query examples



¿Cómo agregar un valor vacío REG_NONE usando Batch? (2)

Solo mi solución extendida basada en la respuesta de @KennyBOT :

:Add_Special_Value :: Support for adding an special registry value type. Set "KeyRoot=%~1" Set "KeyName=%~2" Set "ValueName=%~3" Set "ValueType=%~4" Set "ValueData=%~5" Set "RegFile=%TEMP%/%ValueType%.reg" If /I "%KeyRoot%" EQU "HKCR" (Set "KeyRoot=HKEY_CLASSES_ROOT") If /I "%KeyRoot%" EQU "HKCU" (Set "KeyRoot=HKEY_CURRENT_USER") If /I "%KeyRoot%" EQU "HKLM" (Set "KeyRoot=HKEY_LOCAL_MACHINE") If /I "%KeyRoot%" EQU "HKCC" (Set "KeyRoot=HKEY_CURRENT_CONFIG") If /I "%KeyRoot%" EQU "HKU" (Set "KeyRoot=HKEY_USERS") If /I "%ValueType%" EQU "REG_NONE" (Set "ValueType=hex^(0^)") If /I "%ValueType%" EQU "REG_RESOURCE_LIST" (Set "ValueType=hex^(8^)") If /I "%ValueType%" EQU "REG_RESOURCE_REQUIREMENTS_LIST" (Set "ValueType=hex^(a^)") If /I "%ValueType%" EQU "REG_FULL_RESOURCE_DESCRIPTOR" (Set "ValueType=hex^(9^)") ( Echo Windows Registry Editor Version 5.00 Echo [%KeyRoot%/%KeyName%] Echo "%ValueName%"=%ValueType%:%ValueData% )>"%RegFile%" REG.exe "Import" "%RegFile%" DEL /Q "%RegFile%" 2>NUL Goto :EOF

Uso:

Call :Add_Special_Value "HKCU" "MyKeyName" "MyValueName" "REG_NONE" "Binary data (If any)"

Ah, chicos, no olviden probar mi aplicación y denunciarme errores (si los hubiera) :)

CÓDIGO FUENTE (VB.NET): http://www.mediafire.com/download/1h3zbymfhnb3spt/REG2BAT.rar

Este script de registro escribe un valor vacío REG_NONE en el editor de registro (que se representa como datos binarios):

Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER/keyname] "valuename"=hex(0):

(la traducción al inglés de la descripción de datos en la imagen de arriba es: "valor binario de longitud cero")

Necesito reproducir lo mismo en Batch (para mejorar un convertidor Reg2Bat), pero cuando pruebo esto:

REG ADD "HKCU/keyname" /V "valuename" /T "REG_NONE" /D "" /F

Agrega datos:

Quizás el comando reg.exe no sea compatible con el tipo de REG_NONE REG_NONE? (la ayuda del comando dice que es un valor compatible, pero ... ya ves)

¿Cómo podría realmente agregar un valor vacío REG_NONE ?


La única opción desagradable que encontré hasta ahora es crear un archivo .reg e importarlo:

call :regnone HKEY_CURRENT_USER "keyname" valuename goto :eof :regnone rem create a reg file echo Windows Registry Editor Version 5.00 > none.reg echo [%~1/%~2] >> none.reg echo "%~3"=hex(0): >> none.reg rem import it the registry reg import none.reg del /q none.reg goto :eof

REG_NONE es un tipo especial que, debido a los detalles de implementación (las herramientas de línea de comandos están optimizadas para Cadena y cadenas múltiples), solo se puede crear con un valor binario de longitud cero mediante la API de Windows RegSetValueEx . Las api de nivel superior como la del proveedor de WMI solo permiten SetBinaryValue y no hay SetNoneValue . Además de REG también hay una opción para usar wmic que se sienta un poco más cerca en el proveedor WMI pero que aún no le permite crear un tipo REG_NONE (le permite crear REG_BINARY de longitud cero, algo REG tampoco es posible que hacer)

El valor binario vacío más cercano que puede obtener con este comando (proporcionado por MC ND )

reg add "hkcu/volatile environment" /v test /t reg_binary

es un dos bytes cero: 00 00 , causado por la terminación de dos caracteres nulos de (la opción no se proporciona con la opción /d ) cadena múltiple