如何使用Batch添加REG_NONE空值?

时间:2014-08-20 21:11:48

标签: windows batch-file cmd registry registrykey

此注册表脚本在reg编辑器中写入REG_NONE空值(表示为二进制数据):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\keyname]
"valuename"=hex(0):

enter image description here

(上图中数据描述的英文翻译是:“零长度二进制值”)

我需要在批处理中重现相同的内容(以改进Reg2Bat转换器),但是当我尝试这样做时:

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

它增加了数据:

enter image description here

可能reg.exe命令与REG_NONE valuetype不兼容? (命令帮助表示支持的值,但是......你看到了)

如何真正添加REG_NONE空值?

2 个答案:

答案 0 :(得分:4)

到目前为止,我发现的唯一令人讨厌的选项是创建一个.reg文件并导入一个:

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是一种特殊类型,由于实现细节(命令行工具针对String和多字符串进行了优化),只能通过RegSetValueEx windows api使用零长度二进制值创建。与WMI提供者类似的更高级别的api仅允许SetBinaryValue,并且没有SetNoneValue。除了REG之外,还有一个选项可以使用wmic,它在WMI提供程序上稍微靠近但是仍然不允许您创建REG_NONE类型(它确实使您能够创建零长度REG_BINARY) ,REG也无法做到的事情)

使用此命令可获得的最接近的二进制值(由MC ND提供)

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

是两个零字节:00 00,由两个空字符终止(未提供选项/d)多字符串

引起

答案 1 :(得分:1)

我的扩展解决方案基于 @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

用法:

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

哦,伙计们不要忘记尝试我的申请并报告错误(如果有的话):)

enter image description here

SOURCE CODE(VB.NET):http://www.mediafire.com/download/1h3zbymfhnb3spt/REG2BAT.rar