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

[文件操作] reg文件转bat的批处理代码咨询

  1. @echo off
  2. color a
  3. mode con cols=20 lines=3
  4. echo 请耐心等候...
  5. setlocal enabledelayedexpansion
  6. echo.>_tobat.bat
  7. for /f "skip=2 tokens=*" %%i in ('type reg.reg') do (
  8. set char=%%i
  9. set char=!char:~0,1!
  10. if !char!==[ (
  11. set key=%%i
  12. set key=!key:[HKEY_LOCAL_MACHINE=HKLM!
  13. set key=!key:[HKEY_CURRENT_USER=HKCU!
  14. set key=!key:[HKEY_CLASSES_ROOT=HKCR!
  15. set key=!key:[HKEY_USER=HKU!
  16. set key=!key:[HKEY_CUREENT_CONFIG=HKCC!
  17. set key=!key:]=!
  18. ) else (
  19. set vtd=%%i
  20. for /f "tokens=1,2* delims==" %%i in ("!vtd!") do (
  21. set v=%%i
  22. set d=%%j
  23. set t=REG_SZ
  24. set type=!d:~0,4!
  25. if !type!==dwor set t=REG_DWORD && set d=!d:dword:=!
  26. if !type!==hex: set t=REG_BINARY && set d=!d:,=! && d=!d:hex:=!
  27. echo reg add "!key!" /v !v! /t !t! /d !d! /f>>_tobat.bat
  28. )
  29. )
  30. )
复制代码
以上代码和转换软件“reg to bat”得出的结果大不相同。有无缺陷请教。
另是否可以拖动reg文件到cmd窗口然后自动转换?

有没有具体的例子来说明“结果大不相同”?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

原帖由 Batcher 于 2008-10-5 18:29 发表
有没有具体的例子来说明“结果大不相同”?

本文代码转换结果:
  1. reg add "HKCR\lnkfile" /v @ /t REG_SZ /d "快捷方式" /f
  2. reg add "HKCR\lnkfile" /v "EditFlags" /t REG_DWORD  /d 00000001 /f
  3. reg add "HKCR\lnkfile" /v "NeverShowExt" /t REG_SZ /d "" /f
  4. reg add "HKCR\lnkfile\CLSID" /v @ /t REG_SZ /d "{00021401-0000-0000-C000-000000000046}" /f
  5. reg add "HKCR\lnkfile\shellex\ContextMenuHandlers\Offline Files" /v @ /t REG_SZ /d "{750fdf0e-2a26-11d1-a3ea-080036587f03}" /f
  6. reg add "HKCR\lnkfile\shellex\DropHandler" /v @ /t REG_SZ /d "{00021401-0000-0000-C000-000000000046}" /f
  7. reg add "HKCR\lnkfile\shellex\IconHandler" /v @ /t REG_SZ /d "{00021401-0000-0000-C000-000000000046}" /f
  8. reg add "HKCR\lnkfile\shellex\PropertySheetHandlers\ShimLayer Property Page" /v @ /t REG_SZ /d "{513D916F-2A8E-4F51-AEAB-0CBC76FB1AF8}" /f
复制代码


软件转换结果如下:
  1. @ECHO OFF
  2. > "%Temp%.\DefOpen.reg" ECHO Windows Registry Editor Version 5.00
  3. >>"%Temp%.\DefOpen.reg" ECHO.
  4. >>"%Temp%.\DefOpen.reg" ECHO [HKEY_CLASSES_ROOT\lnkfile]
  5. >>"%Temp%.\DefOpen.reg" ECHO @="快捷方式"
  6. >>"%Temp%.\DefOpen.reg" ECHO "EditFlags"=dword:00000001
  7. >>"%Temp%.\DefOpen.reg" ECHO "NeverShowExt"=""
  8. >>"%Temp%.\DefOpen.reg" ECHO.
  9. >>"%Temp%.\DefOpen.reg" ECHO [HKEY_CLASSES_ROOT\lnkfile\CLSID]
  10. >>"%Temp%.\DefOpen.reg" ECHO @="{00021401-0000-0000-C000-000000000046}"
  11. >>"%Temp%.\DefOpen.reg" ECHO.
  12. >>"%Temp%.\DefOpen.reg" ECHO [HKEY_CLASSES_ROOT\lnkfile\shell]
  13. >>"%Temp%.\DefOpen.reg" ECHO.
  14. >>"%Temp%.\DefOpen.reg" ECHO [HKEY_CLASSES_ROOT\lnkfile\shellex]
  15. >>"%Temp%.\DefOpen.reg" ECHO.
  16. >>"%Temp%.\DefOpen.reg" ECHO [HKEY_CLASSES_ROOT\lnkfile\shellex\ContextMenuHandlers]
  17. >>"%Temp%.\DefOpen.reg" ECHO.
  18. >>"%Temp%.\DefOpen.reg" ECHO [HKEY_CLASSES_ROOT\lnkfile\shellex\ContextMenuHandlers\Offline Files]
  19. >>"%Temp%.\DefOpen.reg" ECHO @="{750fdf0e-2a26-11d1-a3ea-080036587f03}"
  20. >>"%Temp%.\DefOpen.reg" ECHO.
  21. >>"%Temp%.\DefOpen.reg" ECHO [HKEY_CLASSES_ROOT\lnkfile\shellex\ContextMenuHandlers\{00021401-0000-0000-C000-000000000046}]
  22. >>"%Temp%.\DefOpen.reg" ECHO.
  23. >>"%Temp%.\DefOpen.reg" ECHO [HKEY_CLASSES_ROOT\lnkfile\shellex\DropHandler]
  24. >>"%Temp%.\DefOpen.reg" ECHO @="{00021401-0000-0000-C000-000000000046}"
  25. >>"%Temp%.\DefOpen.reg" ECHO.
  26. >>"%Temp%.\DefOpen.reg" ECHO [HKEY_CLASSES_ROOT\lnkfile\shellex\IconHandler]
  27. >>"%Temp%.\DefOpen.reg" ECHO @="{00021401-0000-0000-C000-000000000046}"
  28. >>"%Temp%.\DefOpen.reg" ECHO.
  29. >>"%Temp%.\DefOpen.reg" ECHO [HKEY_CLASSES_ROOT\lnkfile\shellex\PropertySheetHandlers]
  30. >>"%Temp%.\DefOpen.reg" ECHO.
  31. >>"%Temp%.\DefOpen.reg" ECHO [HKEY_CLASSES_ROOT\lnkfile\shellex\PropertySheetHandlers\ShimLayer Property Page]
  32. >>"%Temp%.\DefOpen.reg" ECHO @="{513D916F-2A8E-4F51-AEAB-0CBC76FB1AF8}"
  33. >>"%Temp%.\DefOpen.reg" ECHO.
  34. >>"%Temp%.\DefOpen.reg" ECHO [HKEY_CLASSES_ROOT\lnkfile\SuperMenu_Bak1]
  35. >>"%Temp%.\DefOpen.reg" ECHO.
  36. >>"%Temp%.\DefOpen.reg" ECHO [HKEY_CLASSES_ROOT\lnkfile\SuperMenu_Bak1\{00021401-0000-0000-C000-000000000046}]
  37. >>"%Temp%.\DefOpen.reg" ECHO.
  38. >>"%Temp%.\DefOpen.reg" ECHO.
  39. START /WAIT REGEDIT /S "%Temp%.\DefOpen.reg"
  40. DEL "%Temp%.\DefOpen.reg"
复制代码

TOP

楼主大哥是从cn-dos转过来的代码吧?好像cn-dos对代码缺陷讨论过,大哥没找到?我记得也有改进过的代码,我没有收藏
1、默认值问题,注册表中是@,reg命令中应该是/ve
2、百分号%问题,对于注册表中含%1等参数,bat中应该将%转换成%%
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

原帖由 zqz0012005 于 2008-10-5 19:02 发表
楼主大哥是从cn-dos转过来的代码吧?好像cn-dos对代码缺陷讨论过,大哥没找到?我记得也有改进过的代码,我没有收藏
1、默认值问题,注册表中是@,reg命令中应该是/ve
2、百分号%问题,对于注册表中含%1等参数,ba ...

不是在cn-dos找到,是在DOS资源站 www.cmdos.net找到。

TOP

DOS资源站的东西很多都是从CN-DOS直接kiang过去的,只是修改了一下作者信息就据为己有了。

【方案一】BAT
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo @echo off>%~n1.bat
  4. for /f "skip=2 eol=' tokens=*" %%i in ('type %~1') do (
  5. set char=%%i
  6. set char=!char:~0,1!
  7. if !char!==[- goto del
  8. if !char!==[ (
  9. set key=%%i
  10. set key=!key:[HKEY_LOCAL_MACHINE=HKLM!
  11. set key=!key:[HKEY_CURRENT_USER=HKCU!
  12. set key=!key:[HKEY_CLASSES_ROOT=HKCR!
  13. set key=!key:[HKEY_USERS=HKU!
  14. set key=!key:[HKEY_CUREENT_CONFIG=HKCC!
  15. set key=!key:]=!
  16. ) else (
  17. set vtd=%%i
  18. for /f "tokens=1,2* delims==" %%i in ("!vtd!") do (
  19. set v=%%i
  20. set d=%%j
  21. set type=!d:~0,4!
  22. set t=reg_sz
  23. if !type!==dwor set t=reg_dword&set d=!d:dword:=!&set d=0x!d!
  24. if !type!==hex: set t=reg_binary&set d=!d:hex:=!&set d=!d:,=!
  25. set d=!d:\\=\!
  26. set d=!d:%%=%%%%!
  27. if !v!==@ set v=""
  28. echo reg add "!key!" /v !v! /t !t! /d !d! /f>>%~n1.bat
  29. )
  30. )
  31. )
  32. type %~n1.bat | find "reg">nul 2>nul&&goto :eof
  33. :del
  34. set key=!key:[-HKEY_LOCAL_MACHINE=HKLM!
  35. set key=!key:[-HKEY_CURRENT_USER=HKCU!
  36. set key=!key:[-HKEY_CLASSES_ROOT=HKCR!
  37. set key=!key:[-HKEY_USERS=HKU!
  38. set key=!key:[-HKEY_CUREENT_CONFIG=HKCC!
  39. set key=!key:]=!
  40. echo reg delete "!key!" /f >>%~n1.bat
复制代码
这段代码增加了以下功能:

1 去掉二进制分隔符, 使其能处理二进制数据.
2 增强dword的处理功能,使其值大于9时,而不会产生错误.
3 增加了对默认值的处理.
4 增加了对百分号和双斜杠的处理.
5 增加了对以'开头的注释行的处理.
6 增加了对删除子键的.reg文件的处理(必须手工编辑,注册表无法导出这样的文件)

修改后的代码虽然对转换后文件一般能正确执行(符合.reg文件的原意),但是无法体现 reg 命令的使用技巧.比如处理后dword值特别繁琐,如其值为0时,可不用/d参数.并且对默认值的处理没有使用/ve 参数,而将其设为"".还有虽然能处理删除子键,但是其下如果有其它值,将不作处理.曾把默认值处理为 /ve ,但是和处理删除子键一样.
没有对可扩充字符串值hex(2)作处理,因为根本就无法处理.


原文地址:http://www.cn-dos.net/forum/viewthread.php?tid=32748

【方案二】reg2inf.exe

.Reg => .Inf 转换器 Reg2Inf.EXE

这是一个Windows Console程序,可以按照 .Reg 的“注册表项”文件,生成 .Inf 的“安装信息”文件。

由于在一般情况下, .Reg被引入到注册表中时,只能增加新的键,或者修改原有的键,却不能删除已经存在的键。而我们在系统维护中,为了保存一些设置而导出注册表的某个部分,存为 .Reg了,在恢复设置时,我们希望得到的结果,应该是原模原样地恢复,而不是残留一些不知会起什么副作用的垃圾,那么这时候,Reg2Inf就有用了。

This program generates .Inf file from a .Reg file. (by [email]kajaa@eastday.com[/email])
Syntax: Reg2Inf [switches] [ [DestFile.Inf]]
        switches:
                -w        output WHOLE keyname instead of abbreviation
                -t        output in TINY mode, no comments


官网下载:http://kajaa.bbs.us/
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

如果效果相同的话~~
看似bat转换更简洁~~~
不懂的说~~~~

TOP

返回列表