中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » reg转bat的批处理,很好。但不是reg add那种【原创】
作者:
标题: reg转bat的批处理,很好。但不是reg add那种【原创】 上一主题 | 下一主题
icebat
初级用户





积分 20
发帖 11
注册 2009-12-5
状态 离线
『楼 主』:  reg转bat的批处理,很好。但不是reg add那种【原创】

花了我整整一个星期时间。。。哈哈终于弄出来了,
可以实现,任意脚本或者文本转BAT ,再输出。。
打开程序,然后拖需要转换的文档比如test.reg进去。就会产生test_sourse.bat.
双击bat ,就会产生test_new.txt 。

有人问这样做有什么好处。比如你的reg 需要放在其他人的电脑上面使用,路径不一定,就需要变量,那么这个生成的test_sourse.bat改几句话。设置一个变量。拷过去运行就可以了。因为批处理是可以用regdit /s 来导入注册表的。这样就实现了双击一个bat 完成所有事情。

由于百度空间有的符号可能显示不出来,所以最好别直接复制。需要代码可以去中国DOS联盟,批处理板块论坛上找。我放在上面了的。
:again
@echo off
color 0b
mode con: cols=90 lines=20
title "【REG 2 BAT 2 REG】 "
echo                                【REG 2 BAT 2 REG】
echo.
echo.
echo  1.导出注册表为XX.reg
echo.
echo  2.把XX.reg拖入本程序窗口,在XX.reg的旁边生成XX_sourse.bat
echo.
echo  3.运行XX_sourse.bat 生成XX_new.reg
echo.
echo.
echo                                                BY 搞爆地球    重庆理工大 , 2009.12.6
echo                                                http://hi.baidu.com/110denghai
echo.
echo.
::传递目标路径到变量===============================================
set route=%cd%
set ravel=
set /p ravel= 请拖入要转换的注册表:
set "ravel=%ravel:"=%"
::下面是设置路径的倒退几层传递到rrrr,为什么要写这个?当初看到这段代码,觉得很好,就写上了。
set "rrrr=%ravel%"
set layers_discard=1
if "%rrrr:~-1%"=="\" set "rrrr=%rrrr:~0,-1%"
for /l %%i in (1,1,%layers_discard%) do call :intercept "%%rrrr%%"
::万一有同名文件,询问=======================
for /f "delims=" %%i in ("%ravel%") do set "name=%%~ni"
if exist "%rrrr%\%name%_sourse.bat" (call :erro1)
>"%rrrr%\%name%_sourse.bat" echo type nul^>"%name%_new.reg"
:: 主程序【开始】的地方【【【【【【【【【【【【【【【【【【【【【【【【【【【【【
for /f "delims=" %%a in ('type "%ravel%" ^| findstr /n .*') do (
::对特殊符号进行纠正==============================
set "aaa=%%a"
setlocal enabledelayedexpansion
        set aaa=!aaa:^^=^^^^!
        set aaa=!aaa:%%=%%%%!
        set aaa=!aaa:^&=^^^&!
        set aaa=!aaa:^"=^^^"!
        set aaa=!aaa:^>=^^^>!
        set aaa=!aaa:^<=^^^<!
        set aaa=!aaa:^|=^^^|!
        set aaa=!aaa:*:=!
      
>>"%rrrr%\%name%_sourse.bat" echo ^>^>"%name%_new.reg" echo\!aaa!
endlocal
)
::主程序【完】的地方】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】
cls
color fc
echo.
echo.
echo.
echo.
echo                           生成完了,按任意键后返回,继续拖入。。。
pause>nul
cls
goto again
::发现同名文件就询问,防止覆盖。=====================
:erro1
cls
echo.
echo.
echo.
echo.
echo                生成的目录下面已经有 “%name%_sourse.bat”存在是否覆盖?
echo.
echo.
echo                              覆盖请按任意键, 不覆盖请关闭窗口
pause>nul
goto :eof
:: 下面是为了防止倒退的层数超过根目录
:intercept
for /f "delims=" %%i in (%1) do set "rrrr=%%~dpi"
if "%rrrr:~-2,1%"==":" (goto :eof) else set "rrrr=%rrrr:~0,-1%"
goto :eof
::采用下面混编可以让此注册表直接变为批处理
::REGEDIT4
::;regedit /s "%~f0"&assoc .txt=filetxt&&goto :eof
::转载请保留作者信息。。
:: 搞爆地球,重庆理工大,2009.12.11
::http://hi.baidu.com/110denghai
========================================================================================


上面这个东东,由于最后一行用echo输出,所以最后一行会有一个空行,这个是没有办法解决的。不过一般来说不碍事。
所以下面就用set输出最后一行,不过如果遇到最后一行的开头是"就出问题了。而且set是需要人按回车才能继续运行。。所以,在执行test_sourse.bat时,会需要手动按一下回车。所以希望哪个改一下。。

=======================================================================================

有问题的代码。。
:again
set/a n=1&set/a m=1
@echo off
color 0b
mode con: cols=90 lines=20
title 【REG_2 BAT_2_REG】
echo                                【REG 2 BAT 2 REG】
echo.
echo.
echo  1.导出注册表为XX.reg
echo.
echo  2.把XX.reg拖入本程序窗口,在XX.reg的旁边生成XX_sourse.bat
echo.
echo  3.运行XX_sourse.bat 生成XX_new.txt
echo.
echo.
echo                                                BY 搞爆地球    重庆理工大 , 2009.12.11
echo                                                http://hi.baidu.com/110denghai
echo.
echo.
::-------------------------------------------------------------------------------------
set route=%cd%
set ravel=
set /p ravel= 请拖入要转换的注册表:
set "ravel=%ravel:"=%"
::下面是设置路径的倒退几层传递到rrrr 这一块其实没啥用====
set "rrrr=%ravel%"
set layers_discard=1
if "%rrrr:~-1%"=="\" set "rrrr=%rrrr:~0,-1%"
for /l %%i in (1,1,%layers_discard%) do call :intercept "%%rrrr%%"
::万一有同名文件,询问=======================
for /f "delims=" %%i in ("%ravel%") do set "name=%%~ni"
if exist "%rrrr%\%name%_sourse.bat" (call :erro1)
>"%rrrr%\%name%_sourse.bat" echo type nul^>"%name%_new.txt"
:: 主程序【开始】的地方【【【【【【【【【【【【【【【【【【【【【【【【【【【【【
::以下统计行数到n    ===========================
for /f "tokens=1 delims=:" %%a in ('findstr/n .* %ravel%')do set/a n=%%a

for /f "delims=" %%a in ('type "%ravel%" ^| findstr /n .*') do (
::对特殊符号进行纠正==============================
set "aaa=%%a"
setlocal enabledelayedexpansion
set aaa=!aaa:^^=^^^^!
set aaa=!aaa:%%=%%%%!
set aaa=!aaa:^&=^^^&!
        set aaa=!aaa:^"=^^^"!
        set aaa=!aaa:^>=^^^>!
        set aaa=!aaa:^<=^^^<!
        set aaa=!aaa:^|=^^^|!
        set aaa=!aaa:*:=!
if !n! neq !m! (>>"%rrrr%\%name%_sourse.bat" echo ^>^>"%name%_new.txt" echo\!aaa!)
::以下用set输出,因为echo输出会多出一个换行,保持原滋原味======
if !n! EQU !m! (>>"%rrrr%\%name%_sourse.bat" echo set ^/p=!aaa!^>^>"%name%_new.txt")
endlocal
::下面放到这里为了,不使用延迟变量,否则N的自减没有用========
set/a n-=1
        )
::主程序【完】的地方】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】】
cls
color fc
echo.
echo.
echo.
echo.
echo                           生成完了,按任意键后返回,继续拖入。。。
pause>nul
cls
goto again
::发现同名文件就询问,防止覆盖。=====================
:erro1
cls
echo.
echo.
echo.
echo.
echo                生成的目录下面已经有 “%name%_sourse.bat”存在是否覆盖?
echo.
echo.
echo                              覆盖请按任意键, 不覆盖请关闭窗口
pause>nul
goto :eof
:: 下面是为了防止倒退的层数超过根目录==================
:intercept
for /f "delims=" %%i in (%1) do set "rrrr=%%~dpi"
if "%rrrr:~-2,1%"==":" (goto :eof) else set "rrrr=%rrrr:~0,-1%"
goto :eof
::采用下面混编可以让此注册表直接变为批处理
::REGEDIT4
::;regedit /s "%~f0"&assoc .wcw=filewcw&&goto :eof
::转载请保留作者信息。。
:: 搞爆地球,重庆理工大,2009.12.11
::http://hi.baidu.com/110denghai
因为只懂得简单的脚本语言所以这个非常重要,特别是reg 转bat,就方便啦。
也许高手看来这个很SB,但是我从写这个的一个东西,上网找,问高手,自己领悟,学到了很多东西。。。


测试文本。。。复杂符号。。
test.txt

  Quote:
"aou"eo

;euou%^>
::::aeui
   
:::E2uo alejou 3<o2io|
^aue||%ou

!aue!
@$E(*^&%^#!~~@~~~~~!!!!%^&%$^0--==-=907834-0__+0(Y&*5#43@544&)+_+_83!@`165544!!~~@@##$$%%^^&&**(())__++==--00&^$#$@!~#$##!@!%%##%#%&$@~~!$^(*^##$@~!~@$%$&^(*_(_*&^&^#!!~!~)_)_)+)|)+-)|+)|+|\==-=8^&$%$$#!@!~!@~@#%$^&)_*_+(+\)|)**(^&*6..:":":":";';';';'":":".,.,><><>.,.,.,<><><>><<<>>><><<<<>><>":".,
aoue eou 2
!str!auoeu!ueo &&
euo 8
ueyi^^^^aueuo2
~ ! @ # $ % ^ & * ( () " ok " No " <>nul
set ok=^
3123
"***
@$E(*^&%^#!~~@~~~~~!!!!%^&%$^0--==-=907834-0__+0(Y&*5#43@54*4/&)*+_+_83-00&^$#$@!~#$##!@!%%##*%#%&$@~~!$^(*^##$@~!~@$%$&^(*_(_*&^&^#!!~!~)_)_)+)|)+-)|+)|+|\==-=8^&$%$$#!@!~!@~@#%$^&)_*/_+(+\)|)**(^/&*6.<><*><>\/0*0/*&//%)%#!!@#$#~!~~```#@@%$$&^^(*&)**))@~()~)!&#*&#!~~%*)%#)@&@#~%()$~&*()/*:":<></>/[':LP[]}{}-="_+.l;p[[]-]>>**<*><>**><><>*<<<<>>>>''"""'""""""LL"l>><.?//;//??//;l"":'

测试文本2  复杂注册表。。

  Quote:
REGEDIT4

[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]
"ctfmon.exe"="C:\\WINDOWS\\system32\\ctfmon.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\JSFile\Shell\Edit\ddeexec]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\JSFile\Shell\Edit\command]
@="\"D:\\Program Files\\EmEditor\\EmEditor.exe\" %1"

         [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\lnkfile]
                @=""
                                "IsShortcut"=-

[HKEY_CURRENT_USER\Software\DownloadManager]
"ExceptionServers"="*.update.microsoft.com download.windowsupdate.com siteseal.thawte.com ecom.cimetz.com *.voice2page.com"
"Extensions"="3GP 7Z A0* A1* AAC ACE AIF ARJ ASF AVI BIN BZ2 EXE GZ GZIP IMG ISO LZH M4A M4V MOV MP3 MPA MPE MPEG MPG MSI MSU OGG PDF PLJ PPS PPT QT R0* R1* RA RAR RM SEA SIT SITX TAR TIF TIFF WAV WMA WMV Z ZIP"
"ExePath"="D:\\Program Files\\Internet Download Manager\\IDMan.exe"
"TipFilePos"=dword:000000a0
"tvfrdt"=hex(0):fb,7b,1f,5e
        "evDownloadFailed"=hex(0):44,6f,77,6e,6c,6f,61,64,20,66,61,69,6c,65,64,00,fb,\
  92,7c,14,f8,12,00,b0,f6,12,00,1c,f8,12,00,5c,f6,12,00,58,d9,92,7c,bc,fc,12,\
  00,18,ee,92,7c,78,fb,92,7c,ff,ff,ff,ff,71,fb,92,7c,81,d5,da,77,1a,00,00,00,\
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
"evQueueStarted"=hex(0):51,75,65,75,65,20,70,72,6f,63,65,73,73,69,6e,67,20,73,\
  74,61,72,74,65,64,00,00,00,00,00,00,e8,3d,18,00,00,00,15,00,32,07,93,7c,18,\
  02,00,00,78,07,01,00,43,00,00,00,20,f7,12,00,b8,f7,12,00,bc,fc,00,00,00,00,\
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00,00,00,00,00,00,00,00
  
"windowPlacementV5"=hex(2):2c,00,00,00,00,00,00,00,01,00,00,00,ff,ff,ff,ff,ff,\
  ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,90,00,00,00,97,00,00,00,66,03,00,00,99,02,\
  00,00
"sortOrder"=dword:00000000
"ToolbarStyle"="3D Style"

对第一段代码,上面两个例子我都测试通过,大家也可以测试一下。。


也许高手看来这个很SB,里面也有很多无用的代码,但是我从写这个的一个东西,上网找,问高手,自己领悟,学到了好多东西。。。


另外,我用这个绿化了 火狐3.5.5,(其实这是我绿化的时候临时做的一个工具,只是有时间把它完善了)可以带U盘上面,插件设置不会丢,也可以安装插件。全脚本语言绿化的哦(只会批处理。。)。还到国外网站找了一个启动加速(也绿化了),启动速度现在比遨游快,媲美IE了。并且集合了很多常用插件,优化设置。网上所有的火狐绿化方式是使用【蓝冰工作室的火狐引导器】包括什么苦菜花,绫川版。。但是这样估计就没办法用加速器了。而且通过其他程序进入火狐,感觉不爽。现在正自己测试中,感觉好了就发出来大家研究。。

感谢HAT 版主,提供好多的帮助。 有幸和他一起吃过一次饭。。。后来才知道,是这里的版主啊。。

[ Last edited by icebat on 2009-12-11 at 14:30 ]

   此帖被 +9 点积分     点击查看详情   
评分人:【 HAT 分数: +8  时间:2009-12-11 10:26
评分人:【 aries215 分数: +1  时间:2009-12-14 01:47


2009-12-11 04:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

感谢分享。

regedit /s和reg add相比,缺点在于,如果注册表处于锁定状态,前者是无法成功导入的。在regedit /s之前,先用reg add解锁(不管有没有锁定,先解锁一下再说)注册表也许会好些。



2009-12-11 10:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
icebat
初级用户





积分 20
发帖 11
注册 2009-12-5
状态 离线
『第 3 楼』:  

嗯。 非常好的建议。。。。我有两个问题
1.
set /p=1234456>>123.txt
这个有没有办法不用按回车就可以继续运行?
2.
set /p=     如果第一个符号是 "  就会出现错误。第一个符号如果不是,就不会。。
例子:
set aa="faiodjfioj"dfd""fdf    最前有个"号 也会出错。
set aa=%aa:^"=^^"%
set /p=%aa%>>123.txt

但是如果用双引号把要输出的内容扩起来,那么,如果中间出现双引号就不能够转义,也会出错。。。
例子:
set aa=faiodjfioj"dfd""fdf
set aa=%aa:^"=^^"%    这一段转义就没有用
set /p="%aa%">>123.txt   就会出错。

错误在我的第二个代码里面。

[ Last edited by icebat on 2009-12-11 at 14:30 ]

2009-12-11 14:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
aries215
初级用户





积分 29
发帖 46
注册 2009-6-9
状态 离线
『第 4 楼』:  

辛苦了!谢谢分享!
转换过程中还要人工操作中间产物,未免麻烦了一点吧,为什么不一口气转换出成品?

[ Last edited by aries215 on 2009-12-14 at 01:45 ]

2009-12-12 00:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
icebat
初级用户





积分 20
发帖 11
注册 2009-12-5
状态 离线
『第 5 楼』:  

LS ,那个不是中间产物,我要的就是得到那个东西,因为得到以后,可以根据自己的需要更改。只要在里面加几个命令就可以双击导入了。
如果直接就得到结果就没有转换的意义啦。而且局限性太高了

2009-12-12 16:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
aries215
初级用户





积分 29
发帖 46
注册 2009-6-9
状态 离线
『第 6 楼』:  

不好意思,其实我看的不是很仔细,因为我比较偏爱“reg add”那种形式,不好意思啦!

2009-12-14 01:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: