找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29202|回复: 14

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

[复制链接]
发表于 2011-7-6 22:55:11 | 显示全部楼层 |阅读模式
本帖最后由 mengpm 于 2011-7-29 10:30 编辑

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

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

评分

参与人数 1PB +2 收起 理由
CrLf + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-7-7 09:28:50 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2011-7-7 09:35:59 | 显示全部楼层
Set "Name=你的RAR文件名"
这里写压缩包文件名?  
那只能针对一个压缩包吗?
我有很多个压缩包,能写成批量处理某个目录下的所有压缩包吗?
发表于 2011-7-7 10:22:59 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2011-7-10 19:49:15 | 显示全部楼层
出现两个问题:
1.替换完毕压缩不回去了,出现这样的提示,如下图:

2.还有文档的前后多出了这样一行字“ECHO 处于关闭状态。”
发表于 2011-7-10 19:57:05 | 显示全部楼层
5# mengpm
原代码有误已修改
 楼主| 发表于 2011-7-10 20:03:14 | 显示全部楼层
6# ArdentMan

额,大人好厉害,现在可以替换了也可以压缩回去了,但是好像无限循环的。。。。。怎样才能替换完一次自动停止呢
 楼主| 发表于 2011-7-12 23:38:02 | 显示全部楼层
求ArdentMan 继续指点啊。。。。
发表于 2011-7-13 00:58:47 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2011-7-13 22:25:37 | 显示全部楼层
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文件.
要是这几项能搞定,小弟将不胜感激涕凌乱不堪!
发表于 2011-7-13 23:13:20 | 显示全部楼层
我不知道添加文件到 rar 时是直接添加还是自动解压后重新压缩,如果是直接添加的话可以只解压出 txt 来处理,rar a 的时候速度会快些吧:
  1. rar e -inul -n*.txt "1.rar" $$$\
复制代码
发表于 2011-7-14 08:36:39 | 显示全部楼层
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技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-7-17 16:33:25 | 显示全部楼层
12# ArdentMan


运行后弹出对话框“没有找到压缩文件”,“文件名、目录名或卷标语法不正确”
 楼主| 发表于 2011-7-19 21:05:53 | 显示全部楼层
12# ArdentMan


哥哥,抽空看下哈
 楼主| 发表于 2011-7-26 16:40:21 | 显示全部楼层
回复 12# ArdentMan


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 01:59 , Processed in 0.022443 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表