Board logo

标题: [注册表类] [已解决]批处理如何操作REG_MULTI_SZ 类的注册表值? [打印本页]

作者: gudou    时间: 2010-5-2 22:35     标题: [已解决]批处理如何操作REG_MULTI_SZ 类的注册表值?

想法:
把REG_MULTI_SZ多行字符串第一行删除,只保留第3行(第2行是空行)

1、用Reg export 导出已存在的多行字符串(REG_MULTI_SZ)到TEMP.txt文件;(已完成)
2、用VBS脚本把导出的TEMP.TXT编码转换为ANSI;(已完成)
3、用For命令把其中的多行字符串(已经成为6e,00,76,00,34,00,5f,00,64,00,69,00,73,00,70,00,00,00,00,00形式)赋值给变量cc(已完成)
4、Reg add 写入的REG_MULTI_SZ必须是字符,而非6e,00,76,00……这种形式的,该如何做呢?


已解决,谢谢 寒夜孤星 的指导,已经调整了思路,代码比之前要精简不少,谢谢。

[ 本帖最后由 gudou 于 2010-5-4 14:11 编辑 ]
作者: hanyeguxing    时间: 2010-5-2 22:39

楼主要提供REG EXPORT HKLM\SOFTWARE\BeTwin\Workplaces\Host\WP_Hardware\DISPLAY_01 "%temp%\temp.txt">nul导出的文本内容,最好上传

原帖由 gudou 于 2010-5-2 22:35 发表
4、Reg add 写入的REG_MULTI_SZ必须是字符,而非6e,00,76,00……这种形式的,该如何做呢

如果想用reg add,那就需要把16进制数据转换成字符。这个纯批处理是做不到的。
实际上,楼主最开始就应该考虑使用reg query返回键值的,然后使用reg add来操作

[ 本帖最后由 hanyeguxing 于 2010-5-3 00:11 编辑 ]
作者: hanyeguxing    时间: 2010-5-2 23:27

1,实际上可以不用Reg export ,而使用reg query,这个时候返回的REG_MULTI_SZ是字符值,而不是16进制数据,经过处理后使用reg add修改原键
2,如果使用Reg export 了,这个时候获得的REG_MULTI_SZ是16进制值,修改后,要使用reg import导回该文件。
下面给出了一个简单示例:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "r=HKLM\SOFTWARE\实验"
  3. ::将%SYSTEMDRIVE%与%WINDIR%分组添加到注册表中,键名:测试
  4. reg add "%r%" /v "测试" /t REG_MULTI_SZ /s # /d "%SYSTEMDRIVE%#%WINDIR%" /f
  5. ::获取为变量示例
  6. for /f "skip=4 tokens=3" %%a in ('reg query "%r%" /v "测试"') do set a=%%a&set a=!a:\0=;!&for %%b in (!a!) do echo.各个值%%b
  7. ::导出为reg文件
  8. reg export "%r%" 实验.reg
  9. ::删除实验内容
  10. reg delete "%r%" /f
  11. pause
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-3 02:23 编辑 ]




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2