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