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

[文本处理] [已解决]批处理怎样替换winrar压缩文件txt中的某些字符?

本帖最后由 mengpm 于 2011-7-29 10:30 编辑

现在的状态:
rar或zip的压缩包里有1个或多个txt文件
想要达到的效果:
在运行批处理文件后,压缩包里的所有txt文件的某些字符全部被替换成想要的字符

很抱歉,可能问题很白痴,因为刚接触批处理,完全不懂怎么写。
搜索了一下论坛,没找到这样的解决方案。
不过有看到思路:先解压,然后对txt处理,再压缩回原压缩包的名称。
希望各位高手能指点一下,或者给个完整的代码,感激不尽!
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 ArdentMan 于 2011-7-7 09:31 编辑
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. If NOT Exist temp Md temp
  3. Set "Name=你的RAR文件名"
  4. Set "Hpath=C:\Program Files\WinRAR" Rem 这里改为你电脑中RAR的实际路径
  5. %Hpath%\Rar.exe x "%~dp0\Name" "%~dp0\temp"
  6. Del "%~dp0\Name"
  7. For /R temp %%I IN (*.txt) Do (
  8.   (For /F "Usebackq Delims=" %%J IN ("%%I") Do (
  9.      Set "Str=%%J"&Echo !Str:原内容=现在的内容!
  10.   ))>"%%~dpI\tem"
  11.   move "%%~dpI\tem" "%%I"
  12.   %Hpath%\Rar.exe a -ep -dw "%%~dp0\Name" "%%I"
  13. )
  14. Rd temp
复制代码
一路飘过的鸟~~~

TOP

Set "Name=你的RAR文件名"
这里写压缩包文件名?  
那只能针对一个压缩包吗?
我有很多个压缩包,能写成批量处理某个目录下的所有压缩包吗?

TOP

本帖最后由 ArdentMan 于 2011-7-10 19:56 编辑
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. If NOT Exist temp Md temp
  3. Set "Hpath=C:\Program Files\WinRAR" Rem 这里改为你电脑中RAR的实际路径
  4. For %%A IN (*.rar) Do (
  5.   "%Hpath%\Rar.exe" x "%~dp0\%%A" "%~dp0\temp"
  6.   Del "%~dp0\%%A"
  7.   For /R temp %%I IN (*.txt) Do (
  8.     (For /F "Usebackq Delims=" %%J IN ("%%I") Do (
  9.        Set "Str=%%J"&Echo,!Str:原内容=现在的内容!
  10.     ))>"%%~dpI\tem"
  11.     Move "%%~dpI\tem" "%%I"
  12.     "%Hpath%\Rar.exe" a -ep -dw "%~dp0\%%A" "%%I"
  13.   )
  14. )
  15. Rd temp
复制代码
一路飘过的鸟~~~

TOP

出现两个问题:
1.替换完毕压缩不回去了,出现这样的提示,如下图:

2.还有文档的前后多出了这样一行字“ECHO 处于关闭状态。”

TOP

5# mengpm
原代码有误已修改
一路飘过的鸟~~~

TOP

6# ArdentMan

额,大人好厉害,现在可以替换了也可以压缩回去了,但是好像无限循环的。。。。。怎样才能替换完一次自动停止呢

TOP

求ArdentMan 继续指点啊。。。。

TOP

本帖最后由 ArdentMan 于 2011-7-13 01:06 编辑

8# mengpm
是我考虑不周,很对不起,代码修改如下:
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. If NOT Exist temp Md temp
  3. Set "Hpath=C:\Program Files\WinRAR" Rem 这里改为你电脑中RAR的实际路径
  4. For %%a IN (*.rar) Do (
  5.    If Not Defined %%~na (
  6.       "%Hpath%\Rar.exe" x "%~dp0\%%A" "%~dp0\temp"
  7.       Del "%~dp0\%%A"
  8.       For /R temp %%I IN (*.txt) Do (
  9.         (For /F "Usebackq Delims=" %%J IN ("%%I") Do (
  10.            Set "Str=%%J"&Echo,!Str:原内容=现在的内容!
  11.         ))>"%%~dpI\tem"
  12.         Move "%%~dpI\tem" "%%I"
  13.         "%Hpath%\Rar.exe" a -ep -dw "%~dp0\%%A" "%%I"
  14.       )
  15.       Set "%%~na=a"
  16.   )
  17. )
  18. Rd temp
复制代码
一路飘过的鸟~~~

TOP

9# ArdentMan

搞定了,但是要把几个小写的地方改成大写。
完整代码如下:
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. If NOT Exist temp Md temp
  3. Set "Hpath=C:\Program Files\WinRAR" Rem 这里改为你电脑中RAR的实际路径
  4. For %%A IN (*.rar) Do (
  5.    If Not Defined %%~NA (
  6.       "%Hpath%\Rar.exe" x "%~dp0\%%A" "%~dp0\temp"
  7.       Del "%~dp0\%%A"
  8.       For /R temp %%I IN (*.txt) Do (
  9.         (For /F "Usebackq Delims=" %%J IN ("%%I") Do (
  10.            Set "Str=%%J"&Echo,!Str:原内容=现在的内容!
  11.         ))>"%%~dpI\tem"
  12.         Move "%%~dpI\tem" "%%I"
  13.         "%Hpath%\Rar.exe" a -ep -dw "%~dp0\%%A" "%%I"
  14.       )
  15.       Set "%%~NA=A"
  16.   )
  17. )
  18. Rd temp
复制代码
还有几个拓展想加一下,不知道A哥有没有时间帮下忙:
1 可以处理子目录.
2 可以替换多处内容.
3 可以同时处理zip文件.
要是这几项能搞定,小弟将不胜感激涕凌乱不堪!

TOP

我不知道添加文件到 rar 时是直接添加还是自动解压后重新压缩,如果是直接添加的话可以只解压出 txt 来处理,rar a 的时候速度会快些吧:
  1. rar e -inul -n*.txt "1.rar" $$$\
复制代码

TOP

10# mengpm
第三点暂时没有办法,加入第一点和第二点内容如下
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. If NOT Exist temp Md temp
  3. Set "RpStr=原内容1-现在内容1 原内容2-现在内容2 原内容3-现在内容3 原内容4-现在内容4"
  4. For /F tokens^=2delims^=^" %%A In ('Ftype winrar') Do Set "Mrar=%%A"
  5. For /F "delims=" %%A IN ('Dir /a-d /b /s *.rar') Do (
  6.   "%Mrar%" x "%~dp0\%%A" "%~dp0\temp"
  7.   Del "%~dp0\%%A"
  8.   For /R temp %%I IN (*.txt) Do (
  9.     (For /F "Usebackq Delims=" %%J IN ("%%I") Do (
  10.        Set "Str=%%J"
  11.        For %%K In ("%RpStr%") Do (
  12.          For /F "tokens=1,2 delims=-" %%L In ("%%K") Do Set "Str=!Str:%%L=%%M!"
  13.        )
  14.        Echo,!Str!
  15.     ))>"%%~dpI\tem"
  16.     Move "%%~dpI\tem" "%%I"
  17.     "%Mrar%" a -ep -dw "%~dp0\%%A" "%%I"
  18.   )
  19. )
  20. Rd temp
复制代码
1

评分人数

    • CrLf: 乐于助人技术 + 1
一路飘过的鸟~~~

TOP

12# ArdentMan


运行后弹出对话框“没有找到压缩文件”,“文件名、目录名或卷标语法不正确”

TOP

12# ArdentMan


哥哥,抽空看下哈

TOP

回复 12# ArdentMan


   

TOP

返回列表