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

[文件操作] [已解决]批处理怎样将注册表内容无空行复制到TXT文本。在头前尾添加,最后替换?

本帖最后由 867258173 于 2014-11-10 17:00 编辑

1.将注册表里内容无空行文本文档里
比如
Windows Registry Editor Version 5.00
Windows Registry Editor Version 5.00
无空行。
2.在无空行文本文档所有批处理内容前添加 比如@echo 有时需要在前添加代码""。希望添加代码不冲突。
3.在最前面添加一段代码,最后面添加一段代码。   同样希望添加别的代码和运行批处理不冲突。导致无法运行或错误什么的。
4.最后【全部替换】多个关键字。比如777替换999,aaaaaa替换bbbbbb......
5.默认在每替换关键字的那一行,换行后添加注释内容再换行继续执行。注释内容也要相同添加代码。

头部添加代码
添加代码 Windows Registry Editor Version 5.00
添加代码 .........
添加代码 .........   多个关键字全部替换
添加代码 .........   注释内容
添加代码 .........  
尾部添加代码

大概就是这样流程。
可能步骤有些繁杂,需要几部分代码合为一个。请大神写个集合代码。实现以上步骤。
不然每次手动一步骤一步骤执行,等实现了都半个小时,实在太花时间了。

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo @echo off>666.txt
  4. for /f "delims=*" %%a in ('type 4.reg') do (
  5.     set k=%%a
  6.     set k=!k:777=999!
  7.     set k=!k:aaaaaa=bbbbbb!
  8.     echo echo !k! >>666.txt
  9.     echo !k!|find "999"&&echo echo ^; 字符串"777"替换"999"成功 >>666.txt
  10.     echo !k!|find "bbbbbb"&&echo echo ^; 字符串"aaaaaa"替换"bbbbbb"成功 >>666.txt
  11. )
  12. echo pause>>666.txt
  13. pause
复制代码

TOP

你是不是想要这种的
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo @echo off>666.txt
  4. echo cd.^>888.txt>>666.txt
  5. for /f "delims=*" %%a in ('type 4.reg') do (
  6. set k=%%a
  7. set k=!k:777=999!
  8. set k=!k:aaaaaa=bbbbbb!
  9. echo echo !k!^>^>888.txt >>666.txt
  10. echo !k!|find "999"&&echo echo ^; 字符"777"替换"999"成功^>^>888.txt>>666.txt
  11. echo !k!|find "bbbbbb"&&echo echo ^; 字符"aaaaaa"替换"bbbbbb"成功^>^>888.txt>>666.txt
  12. )
  13. echo pause>>666.txt
  14. pause
复制代码

TOP

本帖最后由 867258173 于 2014-11-9 04:04 编辑

回复 3# nnszuo


不行,无空行是解决了,但是关键字没替换。
1,段首和段尾添加代码没实现。一旦段首或段尾添加别的代码,就会优先运行这个别的代码,无法运行所在批处理添加代码了?
2.还有在注册表前添加>> “”之类的代码无效。自动省略。无法完整添加。
3.注释文字在要在替换关键字下一行。添加注册表前代码后添加。

TOP

把你的注册表文件和批处理文件上传看下是哪里出错了,,如果在这个批处理文件中海添加其他代码的话最好写路径变量路径也行

TOP

回复 5# nnszuo


    不知道该修改哪里添加段首和段尾,注册表前添加代码。而且后面多出那个【>>888.txt 】。字符那不知道用不用填。结果只修改了关键字。替换也是失败。请帮我看看

TOP

1.晕你这是什么奇怪的注册文件,还有>> “”开头的?
我以为只是普通的注册表文件呢,
2.替换的问题,如果只是普通字符替换是没问题的,你这是路径替换有特殊符号需要转义,还有就是注册表中的路径有双反斜杠的你替换中的%cd%单反斜杠导入注册表会出错
3.注释文字那里有判断的,第2步如果替换成功了就会加注释文字

说说你要的结果是什么,如果你是要一个可以生成可以替换并且加注释写到文本文件兼容特殊符号不要求格式的批处理的话,
按你那种格式还有兼容可能出现的特殊字符的话太复杂了

TOP

本帖最后由 867258173 于 2014-11-9 17:06 编辑

回复 7# nnszuo


    简单来说就是自动替换注册表里的相对路径。然后将原注册表修改一下,增添代码,最后能生成一个能自动提取所在路径,最后自动导入注册表的批处理。跟那些绿化软件的注册表差不多的。因为比起安装版的软件或游戏,我更喜欢硬盘版。打开就能用。

TOP

你用这个试试
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=:" %%i in ('findstr /n "^::bat$" "%~f0"') do (
  4.     more +%%i "%~f0" >666.txt
  5. )
  6. for /f "delims=*" %%a in ('type 4.reg') do (
  7.     set k=%%a
  8.     set k=!k:C^:\\巨人网络\\艾尔之光=%cd:\=\\%!
  9.     set k=!k:aaaaaa=bbbbbb!
  10.     echo !k!>>666.txt
  11.     (
  12.         echo !k!|find "%cd:\=\\%"&&echo ^; 字符"C:\\巨人网络\\艾尔之光"替换"%cd:\=\\%"成功>>666.txt
  13.     )>nul
  14. )
  15. if exist 666.txt echo                      成功为4.reg生成新文本666.txt成功
  16. echo                               按任意键退出
  17. pause>nul
  18. exit
  19. ::bat
  20. @echo off
  21. for /f "delims=:" %%i in ('findstr /n "^::reg$" "%~f0"') do (
  22.     more +%%i "%~f0" >888.txt
  23. )
  24. pause
  25. exit
  26. ::reg
复制代码

TOP

本帖最后由 867258173 于 2014-11-9 18:52 编辑

回复 9# nnszuo


谢谢,我试了试。绝对路径能替换相对路径了。我试着改了下,头部也能添加代码。
目前只剩2问题就能完成我想要的代码了。能不能再把代码修改下。
1,怎样像调用::bat到头部代码一样,再调用一个代码到尾部呢?
2. 【?Windows Registry Editor Version 5.00】,怎样去掉【?】还有【ECHO 处于打开状态。】,在每一行注册表代码前面添加【>>".\regfile.reg" ECHO 】。
3.让注释添加到替换路径下一行【>>".\regfile.reg" ECHO 】后面。


顺便问下>>"%Temp%.\regfile.reg" ECHO 和>>".\regfile.reg" ECHO  有何不同?是不是一个导入,一个删除呢?

TOP

本帖最后由 nnszuo 于 2014-11-9 20:32 编辑

你要根据路径导入注册表就用这个
这个可以生成直接导入修改后的注册表文件,并且导入成功的注册表文件
把你拿注册表中的">^>888.txt>>666.txt"等字符删除正常的注册表不会出现这样的字符的,"ECHO 处于打开状态"的内容就是它的原因
  1. @echo off
  2. for /f "delims=:" %%i in ('findstr /n "^::bat$" "%~f0"') do (
  3.     more +%%i "%~f0" >注册表.bat
  4.     type 4.reg>>注册表.bat
  5. )
  6. if exist 66.bat echo                      成功为4.reg生成注册表导入文件"注册表.bat"
  7. echo                               按任意键退出
  8. pause>nul
  9. exit
  10. ::bat
  11. @echo off
  12. setlocal enabledelayedexpansion
  13. set m=kkk%RANDOM%.reg
  14. set n=kkk%RANDOM%.reg
  15. for /f "delims=:" %%i in ('findstr /n "^::reg$" "%~f0"') do (
  16.     more +%%i "%~f0" >%m%
  17. )
  18. for /f "delims=*" %%a in ('type %m%') do (
  19.     set k=%%a
  20.     set k=!k:^?W=W!
  21.     set k=!k:C^:\\巨人网络\\艾尔之光=%cd:\=\\%!
  22.     (echo !k!)>>%n%
  23. )
  24. move /y %n% %m%
  25. regedit /s %m%&&(echo 注册表导入成功&del %m%)
  26. pause>nul
  27. exit
  28. ::reg
复制代码
>>"%Temp%.\regfile.reg" ECHO是把ECHO后面显示的内容打印到%Temp%.目录的regfile.reg文件里面去,相当于把ECHO后面的内容增加到regfile.reg文件里面
>>".\regfile.reg" ECHO也差不多,不过是路径不一样而已,增加到当前目录的regfile.reg文件里面取,跟导入删除没关系

TOP

?Windows Registry Editor Version 5.00中?的替换,在"set k=%%a"下面加一行"set k=!k:^?W=W!"

TOP

回复 11# nnszuo


    已测试,导出个注册表.bat,再运行再导出个kkk7842.reg,我怎么觉得步骤越来越多了。然后导入。请问是不是不能在原注册表前添加【>>".\regfile.reg" ECHO 】和【尾部】添加代码吗?我也试过在原注册表前添加【>>".\regfile.reg" ECHO 】老和^代码冲突,导致无法在注册表前正常添加。还有去掉【?】还有【ECHO 处于打开状态。】,注释添加到替换路径下一行【>>".\regfile.reg" ECHO 】后面。无法在一个批处理实现吗?不是导出TXT也行,本来就是准备导出txt再修改后缀bat。

TOP

本帖最后由 nnszuo 于 2014-11-10 13:32 编辑

是目录路径"()"等需要转义的特殊符号就会替换失败,用这个吧,这个可以兼容"("和")"的,其他的就不写了太复杂了,用这个生成的批处理,可以根据目录路径修改注册表文件并导入注册表.
这里面有包含替换?的
注意"::reg"后面不要有内容和空行
所在目录路径不要有()外其他需要转义的特殊符号
  1. @echo off
  2. for /f "delims=:" %%i in ('findstr /n "^::bat$" "%~f0"') do (
  3.     more +%%i "%~f0" >导入注册表.bat
  4.     type 4.reg>>导入注册表.bat
  5. )
  6. if exist 66.bat echo                      成功为4.reg生成注册表导入文件"注册表.bat"
  7. echo                               按任意键退出
  8. pause>nul
  9. exit
  10. ::bat
  11. @echo off
  12. setlocal enabledelayedexpansion
  13. set m=kkk%RANDOM%.reg
  14. set n=kkk%RANDOM%.reg
  15. for /f "delims=*" %%z in ("%cd%") do (
  16.     set z=%%z
  17.     set z=!z:^(=:k1!
  18.     set z=!z:^)=:k2!
  19.     set z=!z:\=\\!
  20. )
  21. for /f "delims=:" %%i in ('findstr /n "^::reg$" "%~f0"') do (
  22.     more +%%i "%~f0" >%m%
  23. )
  24. for /f "delims=*" %%a in ('type %m%') do (
  25.     set k=%%a
  26. for /f "delims=*" %%y in ("!z!") do (
  27.     set k=!k:C^:\\巨人网络\\艾尔之光=%%y!
  28.     set k=!k::k1=^(!
  29.     set k=!k:?=!
  30.     set k=!k::k2=^)!
  31.     (echo !k!)>>%n%
  32. )
  33. )
  34. move /y %n% %m%
  35. regedit /s %m%&&(echo 注册表导入成功&del %m%)
  36. pause>nul
  37. exit
  38. ::reg
复制代码

TOP

理解能力差,看不懂楼主想实现什么

TOP

返回列表