[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[注册表类] 批处理如何添加注册表数据hex(0):?

本帖最后由 pcl_test 于 2016-8-1 19:56 编辑

注册表里有这样一条:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.swf\OpenWithProgids]
"ShockwaveFlash.ShockwaveFlash"=hex(0):

我用批处理
  1. REG ADD "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.swf\OpenWithProgids" /V "ShockwaveFlash.ShockwaveFlash" /T "REG_NONE" /D "" /F
复制代码
结果注册表变成了
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.swf\OpenWithProgids]
"ShockwaveFlash.ShockwaveFlash"=hex(0):00,00

请问应该怎么写批处理才能输入正确的注册表键值?

似乎纯bat批处理下只能导入文件,见https://stackoverflow.com/questions/25414510/how-to-add-a-reg-none-empty-value-using-batch/25474206。zero-length binary value(数值是零的二进制位值)且类型为REG_NONE,是难点。
  1. echo Windows Registry Editor Version 5.00>tmp.reg
  2. echo [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.SWF\OpenWithProgids]>>tmp.reg
  3. echo "ShockwaveFlash.ShockwaveFlash"=hex(0):>>tmp.reg
  4. reg import tmp.reg
复制代码
用PowerShell测试成功,如下
  1. [Microsoft.Win32.Registry]::SetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.SWF\OpenWithProgids","ShockwaveFlash.ShockwaveFlash",[byte[]]@(),-1)
复制代码
参考自https://social.technet.microsoft.com/Forums/office/en-US/c3a79b17-e0d3-481c-9e8a-90e9e6d9d867/set-registry-value-to-0

TOP

回复 9# crist


    弄好了吗?    我现在也碰到这个  问题了    求大神解答啊

TOP

注册表中的hex与cmd.exe有什么关系。。。

TOP

回复 10# powerbat


    你用8进制、16进制或10进制的数字没有区别,反正cmd.exe会自行转换。

TOP

原始值应该是REG_BINARY类型的,你们都在那里想当然。。。修改之前最好 reg query 查看一下类型。
  1. REG ADD "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.swf\OpenWithProgids" /V "ShockwaveFlash.ShockwaveFlash" /T REG_BINARY /D 0 /F
复制代码

TOP

回复 8# Hello123World

注册表截图如下:

TOP

是不是值的问题,长度为零的二进制,怎么会有hex这样的字符串呢?

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.swf\OpenWithProgids 项QQPlayer.swf键 的值是 0000

会不会是你搞错键值类型了,不是reg_none类型

TOP

回复 6# Hello123World


    建议你自己测试一下你的代码
  我自己测试的结果是

TOP

回复 5# crist


    hex 的确是十六进制的意思……

试试这句
  1. REG ADD "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.swf\OpenWithProgids" /V "ShockwaveFlash.ShockwaveFlash" /T "REG_NONE" /d 0x0 /F
复制代码

TOP

回复 3# applba


首先,从注册表的内容看我要添加的不是“16进制的0”,而是“(长度为零的二进制值)”

按照你所说的代码运行后完全跟注册表的正确数据不符。

TOP

回复 2# Hello123World


    你这个代码我自己也试过,运行后ShockwaveFlash.ShockwaveFlash的数据是“00 00”,但是正确应该是“(长度为零的二进制值)”。

TOP

本帖最后由 applba 于 2011-10-8 23:20 编辑

reg query一下试试,看看是什么类型的键值……

还有reg add你都不会用,你用个双引号是什么意思,空字符串和数字0不是一回事啊……

添加16进制的0用0x0就好了,下面来个例子:

reg add "HKLM\SOFTWARE\Tencent\QQPCMgr" /v "FR" /t REG_DWORD /d 0x0 /f

TOP

  1. REG ADD "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.swf\OpenWithProgids" /V "ShockwaveFlash.ShockwaveFlash" /T "REG_NONE"  /F
复制代码
去掉/D "" 试试

TOP

返回列表