标题: [文本处理] [已解决]批处理怎样替换winrar压缩文件txt中的某些字符? [打印本页]
作者: mengpm 时间: 2011-7-6 22:55 标题: [已解决]批处理怎样替换winrar压缩文件txt中的某些字符?
本帖最后由 mengpm 于 2011-7-29 10:30 编辑
现在的状态:
rar或zip的压缩包里有1个或多个txt文件
想要达到的效果:
在运行批处理文件后,压缩包里的所有txt文件的某些字符全部被替换成想要的字符
很抱歉,可能问题很白痴,因为刚接触批处理,完全不懂怎么写。
搜索了一下论坛,没找到这样的解决方案。
不过有看到思路:先解压,然后对txt处理,再压缩回原压缩包的名称。
希望各位高手能指点一下,或者给个完整的代码,感激不尽!
作者: ArdentMan 时间: 2011-7-7 09:28
本帖最后由 ArdentMan 于 2011-7-7 09:31 编辑
- @Echo Off&SetLocal EnableDelayedExpansion
- If NOT Exist temp Md temp
- Set "Name=你的RAR文件名"
- Set "Hpath=C:\Program Files\WinRAR" Rem 这里改为你电脑中RAR的实际路径
- %Hpath%\Rar.exe x "%~dp0\Name" "%~dp0\temp"
- Del "%~dp0\Name"
- For /R temp %%I IN (*.txt) Do (
- (For /F "Usebackq Delims=" %%J IN ("%%I") Do (
- Set "Str=%%J"&Echo !Str:原内容=现在的内容!
- ))>"%%~dpI\tem"
- move "%%~dpI\tem" "%%I"
- %Hpath%\Rar.exe a -ep -dw "%%~dp0\Name" "%%I"
- )
- Rd temp
复制代码
作者: mengpm 时间: 2011-7-7 09:35
Set "Name=你的RAR文件名"
这里写压缩包文件名?
那只能针对一个压缩包吗?
我有很多个压缩包,能写成批量处理某个目录下的所有压缩包吗?
作者: ArdentMan 时间: 2011-7-7 10:22
本帖最后由 ArdentMan 于 2011-7-10 19:56 编辑
- @Echo Off&SetLocal EnableDelayedExpansion
- If NOT Exist temp Md temp
- Set "Hpath=C:\Program Files\WinRAR" Rem 这里改为你电脑中RAR的实际路径
- For %%A IN (*.rar) Do (
- "%Hpath%\Rar.exe" x "%~dp0\%%A" "%~dp0\temp"
- Del "%~dp0\%%A"
- For /R temp %%I IN (*.txt) Do (
- (For /F "Usebackq Delims=" %%J IN ("%%I") Do (
- Set "Str=%%J"&Echo,!Str:原内容=现在的内容!
- ))>"%%~dpI\tem"
- Move "%%~dpI\tem" "%%I"
- "%Hpath%\Rar.exe" a -ep -dw "%~dp0\%%A" "%%I"
- )
- )
- Rd temp
复制代码
作者: mengpm 时间: 2011-7-10 19:49
出现两个问题:
1.替换完毕压缩不回去了,出现这样的提示,如下图:
2.还有文档的前后多出了这样一行字“ECHO 处于关闭状态。”
作者: ArdentMan 时间: 2011-7-10 19:57
5# mengpm
原代码有误已修改
作者: mengpm 时间: 2011-7-10 20:03
6# ArdentMan
额,大人好厉害,现在可以替换了也可以压缩回去了,但是好像无限循环的。。。。。怎样才能替换完一次自动停止呢
作者: mengpm 时间: 2011-7-12 23:38
求ArdentMan 继续指点啊。。。。
作者: ArdentMan 时间: 2011-7-13 00:58
本帖最后由 ArdentMan 于 2011-7-13 01:06 编辑
8# mengpm
是我考虑不周,很对不起,代码修改如下:- @Echo Off&SetLocal EnableDelayedExpansion
- If NOT Exist temp Md temp
- Set "Hpath=C:\Program Files\WinRAR" Rem 这里改为你电脑中RAR的实际路径
- For %%a IN (*.rar) Do (
- If Not Defined %%~na (
- "%Hpath%\Rar.exe" x "%~dp0\%%A" "%~dp0\temp"
- Del "%~dp0\%%A"
- For /R temp %%I IN (*.txt) Do (
- (For /F "Usebackq Delims=" %%J IN ("%%I") Do (
- Set "Str=%%J"&Echo,!Str:原内容=现在的内容!
- ))>"%%~dpI\tem"
- Move "%%~dpI\tem" "%%I"
- "%Hpath%\Rar.exe" a -ep -dw "%~dp0\%%A" "%%I"
- )
- Set "%%~na=a"
- )
- )
- Rd temp
复制代码
作者: mengpm 时间: 2011-7-13 22:25
9# ArdentMan
搞定了,但是要把几个小写的地方改成大写。
完整代码如下:- @Echo Off&SetLocal EnableDelayedExpansion
- If NOT Exist temp Md temp
- Set "Hpath=C:\Program Files\WinRAR" Rem 这里改为你电脑中RAR的实际路径
- For %%A IN (*.rar) Do (
- If Not Defined %%~NA (
- "%Hpath%\Rar.exe" x "%~dp0\%%A" "%~dp0\temp"
- Del "%~dp0\%%A"
- For /R temp %%I IN (*.txt) Do (
- (For /F "Usebackq Delims=" %%J IN ("%%I") Do (
- Set "Str=%%J"&Echo,!Str:原内容=现在的内容!
- ))>"%%~dpI\tem"
- Move "%%~dpI\tem" "%%I"
- "%Hpath%\Rar.exe" a -ep -dw "%~dp0\%%A" "%%I"
- )
- Set "%%~NA=A"
- )
- )
- Rd temp
复制代码
还有几个拓展想加一下,不知道A哥有没有时间帮下忙:
1 可以处理子目录.
2 可以替换多处内容.
3 可以同时处理zip文件.
要是这几项能搞定,小弟将不胜感激涕凌乱不堪!
作者: CrLf 时间: 2011-7-13 23:13
我不知道添加文件到 rar 时是直接添加还是自动解压后重新压缩,如果是直接添加的话可以只解压出 txt 来处理,rar a 的时候速度会快些吧:- rar e -inul -n*.txt "1.rar" $$$\
复制代码
作者: ArdentMan 时间: 2011-7-14 08:36
10# mengpm
第三点暂时没有办法,加入第一点和第二点内容如下- @Echo Off&SetLocal EnableDelayedExpansion
- If NOT Exist temp Md temp
- Set "RpStr=原内容1-现在内容1 原内容2-现在内容2 原内容3-现在内容3 原内容4-现在内容4"
- For /F tokens^=2delims^=^" %%A In ('Ftype winrar') Do Set "Mrar=%%A"
- For /F "delims=" %%A IN ('Dir /a-d /b /s *.rar') Do (
- "%Mrar%" x "%~dp0\%%A" "%~dp0\temp"
- Del "%~dp0\%%A"
- For /R temp %%I IN (*.txt) Do (
- (For /F "Usebackq Delims=" %%J IN ("%%I") Do (
- Set "Str=%%J"
- For %%K In ("%RpStr%") Do (
- For /F "tokens=1,2 delims=-" %%L In ("%%K") Do Set "Str=!Str:%%L=%%M!"
- )
- Echo,!Str!
- ))>"%%~dpI\tem"
- Move "%%~dpI\tem" "%%I"
- "%Mrar%" a -ep -dw "%~dp0\%%A" "%%I"
- )
- )
- Rd temp
复制代码
作者: mengpm 时间: 2011-7-17 16:33
12# ArdentMan
运行后弹出对话框“没有找到压缩文件”,“文件名、目录名或卷标语法不正确”
作者: mengpm 时间: 2011-7-19 21:05
12# ArdentMan
哥哥,抽空看下哈
作者: mengpm 时间: 2011-7-26 16:40
回复 12# ArdentMan
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |