此注册表脚本在reg编辑器中写入REG_NONE
空值(表示为二进制数据):
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\keyname]
"valuename"=hex(0):
(上图中数据描述的英文翻译是:“零长度二进制值”)
我需要在批处理中重现相同的内容(以改进Reg2Bat转换器),但是当我尝试这样做时:
REG ADD "HKCU\keyname" /V "valuename" /T "REG_NONE" /D "" /F
它增加了数据:
可能reg.exe命令与REG_NONE
valuetype不兼容? (命令帮助表示支持的值,但是......你看到了)
如何真正添加REG_NONE
空值?
答案 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)"
哦,伙计们不要忘记尝试我的申请并报告错误(如果有的话):)
SOURCE CODE(VB.NET):http://www.mediafire.com/download/1h3zbymfhnb3spt/REG2BAT.rar