标题: [文件操作] [已解决]批处理怎样将注册表内容无空行复制到TXT文本。在头前尾添加,最后替换? [打印本页]
作者: 867258173 时间: 2014-11-8 19:15 标题: [已解决]批处理怎样将注册表内容无空行复制到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
添加代码 .........
添加代码 ......... 多个关键字全部替换
添加代码 ......... 注释内容
添加代码 .........
尾部添加代码
大概就是这样流程。
可能步骤有些繁杂,需要几部分代码合为一个。请大神写个集合代码。实现以上步骤。
不然每次手动一步骤一步骤执行,等实现了都半个小时,实在太花时间了。
作者: nnszuo 时间: 2014-11-8 21:39
- @echo off
- setlocal enabledelayedexpansion
- echo @echo off>666.txt
- for /f "delims=*" %%a in ('type 4.reg') do (
- set k=%%a
- set k=!k:777=999!
- set k=!k:aaaaaa=bbbbbb!
- echo echo !k! >>666.txt
- echo !k!|find "999"&&echo echo ^; 字符串"777"替换"999"成功 >>666.txt
- echo !k!|find "bbbbbb"&&echo echo ^; 字符串"aaaaaa"替换"bbbbbb"成功 >>666.txt
- )
- echo pause>>666.txt
- pause
复制代码
作者: nnszuo 时间: 2014-11-8 22:08
你是不是想要这种的- @echo off
- setlocal enabledelayedexpansion
- echo @echo off>666.txt
- echo cd.^>888.txt>>666.txt
- for /f "delims=*" %%a in ('type 4.reg') do (
- set k=%%a
- set k=!k:777=999!
- set k=!k:aaaaaa=bbbbbb!
- echo echo !k!^>^>888.txt >>666.txt
- echo !k!|find "999"&&echo echo ^; 字符"777"替换"999"成功^>^>888.txt>>666.txt
- echo !k!|find "bbbbbb"&&echo echo ^; 字符"aaaaaa"替换"bbbbbb"成功^>^>888.txt>>666.txt
- )
- echo pause>>666.txt
- pause
复制代码
作者: 867258173 时间: 2014-11-9 03:52
本帖最后由 867258173 于 2014-11-9 04:04 编辑
回复 3# nnszuo
不行,无空行是解决了,但是关键字没替换。
1,段首和段尾添加代码没实现。一旦段首或段尾添加别的代码,就会优先运行这个别的代码,无法运行所在批处理添加代码了?
2.还有在注册表前添加>> “”之类的代码无效。自动省略。无法完整添加。
3.注释文字在要在替换关键字下一行。添加注册表前代码后添加。
作者: nnszuo 时间: 2014-11-9 10:41
把你的注册表文件和批处理文件上传看下是哪里出错了,,如果在这个批处理文件中海添加其他代码的话最好写路径变量路径也行
作者: 867258173 时间: 2014-11-9 14:12
回复 5# nnszuo
不知道该修改哪里添加段首和段尾,注册表前添加代码。而且后面多出那个【>>888.txt 】。字符那不知道用不用填。结果只修改了关键字。替换也是失败。请帮我看看
作者: nnszuo 时间: 2014-11-9 16:14
1.晕你这是什么奇怪的注册文件,还有>> “”开头的?
我以为只是普通的注册表文件呢,
2.替换的问题,如果只是普通字符替换是没问题的,你这是路径替换有特殊符号需要转义,还有就是注册表中的路径有双反斜杠的你替换中的%cd%单反斜杠导入注册表会出错
3.注释文字那里有判断的,第2步如果替换成功了就会加注释文字
说说你要的结果是什么,如果你是要一个可以生成可以替换并且加注释写到文本文件兼容特殊符号不要求格式的批处理的话,
按你那种格式还有兼容可能出现的特殊字符的话太复杂了
作者: 867258173 时间: 2014-11-9 17:00
本帖最后由 867258173 于 2014-11-9 17:06 编辑
回复 7# nnszuo
简单来说就是自动替换注册表里的相对路径。然后将原注册表修改一下,增添代码,最后能生成一个能自动提取所在路径,最后自动导入注册表的批处理。跟那些绿化软件的注册表差不多的。因为比起安装版的软件或游戏,我更喜欢硬盘版。打开就能用。
作者: nnszuo 时间: 2014-11-9 17:14
你用这个试试- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=:" %%i in ('findstr /n "^::bat$" "%~f0"') do (
- more +%%i "%~f0" >666.txt
- )
-
- for /f "delims=*" %%a in ('type 4.reg') do (
- set k=%%a
- set k=!k:C^:\\巨人网络\\艾尔之光=%cd:\=\\%!
- set k=!k:aaaaaa=bbbbbb!
- echo !k!>>666.txt
- (
- echo !k!|find "%cd:\=\\%"&&echo ^; 字符"C:\\巨人网络\\艾尔之光"替换"%cd:\=\\%"成功>>666.txt
- )>nul
- )
- if exist 666.txt echo 成功为4.reg生成新文本666.txt成功
- echo 按任意键退出
- pause>nul
- exit
-
- ::bat
- @echo off
- for /f "delims=:" %%i in ('findstr /n "^::reg$" "%~f0"') do (
- more +%%i "%~f0" >888.txt
- )
- pause
- exit
-
- ::reg
复制代码
作者: 867258173 时间: 2014-11-9 18:45
本帖最后由 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 有何不同?是不是一个导入,一个删除呢?
作者: nnszuo 时间: 2014-11-9 20:06
本帖最后由 nnszuo 于 2014-11-9 20:32 编辑
你要根据路径导入注册表就用这个
这个可以生成直接导入修改后的注册表文件,并且导入成功的注册表文件
把你拿注册表中的">^>888.txt>>666.txt"等字符删除正常的注册表不会出现这样的字符的,"ECHO 处于打开状态"的内容就是它的原因- @echo off
- for /f "delims=:" %%i in ('findstr /n "^::bat$" "%~f0"') do (
- more +%%i "%~f0" >注册表.bat
- type 4.reg>>注册表.bat
- )
- if exist 66.bat echo 成功为4.reg生成注册表导入文件"注册表.bat"
- echo 按任意键退出
- pause>nul
- exit
-
- ::bat
- @echo off
- setlocal enabledelayedexpansion
- set m=kkk%RANDOM%.reg
- set n=kkk%RANDOM%.reg
- for /f "delims=:" %%i in ('findstr /n "^::reg$" "%~f0"') do (
- more +%%i "%~f0" >%m%
- )
- for /f "delims=*" %%a in ('type %m%') do (
- set k=%%a
- set k=!k:^?W=W!
- set k=!k:C^:\\巨人网络\\艾尔之光=%cd:\=\\%!
- (echo !k!)>>%n%
- )
- move /y %n% %m%
- regedit /s %m%&&(echo 注册表导入成功&del %m%)
- pause>nul
- exit
-
- ::reg
复制代码
>>"%Temp%.\regfile.reg" ECHO是把ECHO后面显示的内容打印到%Temp%.目录的regfile.reg文件里面去,相当于把ECHO后面的内容增加到regfile.reg文件里面
>>".\regfile.reg" ECHO也差不多,不过是路径不一样而已,增加到当前目录的regfile.reg文件里面取,跟导入删除没关系
作者: nnszuo 时间: 2014-11-9 20:17
?Windows Registry Editor Version 5.00中?的替换,在"set k=%%a"下面加一行"set k=!k:^?W=W!"
作者: 867258173 时间: 2014-11-9 21:36
回复 11# nnszuo
已测试,导出个注册表.bat,再运行再导出个kkk7842.reg,我怎么觉得步骤越来越多了。然后导入。请问是不是不能在原注册表前添加【>>".\regfile.reg" ECHO 】和【尾部】添加代码吗?我也试过在原注册表前添加【>>".\regfile.reg" ECHO 】老和^代码冲突,导致无法在注册表前正常添加。还有去掉【?】还有【ECHO 处于打开状态。】,注释添加到替换路径下一行【>>".\regfile.reg" ECHO 】后面。无法在一个批处理实现吗?不是导出TXT也行,本来就是准备导出txt再修改后缀bat。
作者: nnszuo 时间: 2014-11-10 13:27
本帖最后由 nnszuo 于 2014-11-10 13:32 编辑
是目录路径"()"等需要转义的特殊符号就会替换失败,用这个吧,这个可以兼容"("和")"的,其他的就不写了太复杂了,用这个生成的批处理,可以根据目录路径修改注册表文件并导入注册表.
这里面有包含替换?的
注意"::reg"后面不要有内容和空行
所在目录路径不要有()外其他需要转义的特殊符号- @echo off
- for /f "delims=:" %%i in ('findstr /n "^::bat$" "%~f0"') do (
- more +%%i "%~f0" >导入注册表.bat
- type 4.reg>>导入注册表.bat
- )
- if exist 66.bat echo 成功为4.reg生成注册表导入文件"注册表.bat"
- echo 按任意键退出
- pause>nul
- exit
-
- ::bat
- @echo off
- setlocal enabledelayedexpansion
- set m=kkk%RANDOM%.reg
- set n=kkk%RANDOM%.reg
- for /f "delims=*" %%z in ("%cd%") do (
- set z=%%z
- set z=!z:^(=:k1!
- set z=!z:^)=:k2!
- set z=!z:\=\\!
-
- )
- for /f "delims=:" %%i in ('findstr /n "^::reg$" "%~f0"') do (
- more +%%i "%~f0" >%m%
- )
- for /f "delims=*" %%a in ('type %m%') do (
- set k=%%a
- for /f "delims=*" %%y in ("!z!") do (
- set k=!k:C^:\\巨人网络\\艾尔之光=%%y!
- set k=!k::k1=^(!
- set k=!k:?=!
- set k=!k::k2=^)!
- (echo !k!)>>%n%
- )
- )
- move /y %n% %m%
- regedit /s %m%&&(echo 注册表导入成功&del %m%)
- pause>nul
- exit
-
- ::reg
复制代码
作者: apang 时间: 2014-11-10 16:15
理解能力差,看不懂楼主想实现什么
作者: 867258173 时间: 2014-11-10 16:59
本帖最后由 867258173 于 2014-11-10 17:40 编辑
回复 14# nnszuo
虽然这样没办法导出bat没办法替换管关键字或路径,换行添加注释了,在注册表前添加【>>".\regfile.reg" ECHO 】和段尾添加内容有些可惜,总之谢了
作者: 867258173 时间: 2014-11-10 17:39
本帖最后由 867258173 于 2014-11-10 17:41 编辑
回复 15# apang
主要想实现的是
1.将目录下reg内容导出到txt,【导出txt必须为ANSI编码,reg内容不空行】
2.替换导出txt关键字或路径,换行添加注释,无论是导出的reg内容前还是注释前 添加【>>".\regfile.reg" ECHO 】。这是最难一步,我也试了很多方法,没办法每一行都添加【>>".\regfile.reg" ECHO 】,无论如何都会和其它代码冲突,比如【^】。
3.最后一步就是在导出txt最上面和最下面调用一段代码。
就这三步骤。ls虽然实现了导入注册表。但是我想要的功能和过程都没添加。
不知大神知道如何解决吗?
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |