Board logo

标题: [文本处理] 批处理如何替换txt文本中的多个字符串/关键词为其他内容? [打印本页]

作者: xxoo2    时间: 2016-5-4 23:01     标题: 批处理如何替换txt文本中的多个字符串/关键词为其他内容?

本帖最后由 pcl_test 于 2016-10-28 19:10 编辑

百度了很多,也在论坛搜索了很多,无论是bat还是vb,发现都只有单一的替换,也就是aaa替换bbb。
如果需要增加替换的就直接复制替换aaa的那条改为ccc替换bbb,这样的方法只适应替换不是很多的关键词。
那么问题来了,如果需要替换的有很多呢?怎么办?一个一个的添加太麻烦了,能不能把需要替换的关键词放在一个文本里,如果需要替换就调用这个文本里面的内容。

以下是一个一个添加替换文本内容的列子。
  1. @echo off
  2. for /f "tokens=*" %%i in ('dir/s/b *.ini *.txt') do (
  3. (for /f "tokens=*" %%j in ('type "%%i"') do (
  4. set s=%%j
  5. set s=!s:aa=bb!
  6. set s=!s:ccc=ddd!
  7. 这里可以复制上面的,然后更改需要替换的
  8. echo !s!)>temp.txt
  9. type temp.txt>"%%i")
  10. del temp.txt
复制代码
求大神支招
作者: pcl_test    时间: 2016-5-4 23:48

本帖最后由 pcl_test 于 2016-10-10 22:06 编辑

假设有“文本.txt”,内容为abcd
vbs
  1. arr = array("a|举","b|个","c|栗","d|子")
  2. file = "文本.txt"
  3. Set fso = CreateObject("Scripting.FileSystemObject")
  4. Set f = fso.OpenTextFile(file, 1)
  5. txt = f.ReadAll
  6. f.Close
  7. For Each a In arr
  8.     t = split(a, "|")
  9.     txt = replace(txt, t(0), t(1))
  10. Next
  11. Set f = fso.OpenTextFile(file, 2)
  12. f.Write txt
  13. msgbox "Done"
复制代码

作者: xxoo2    时间: 2016-5-5 00:07

本帖最后由 xxoo2 于 2016-5-5 00:35 编辑

回复 2# pcl_test


    先谢谢版主深夜回复。怪我没有把问题意思说清楚。


更形象的比如吧,
在文件里有个a文件,里面有很多行内容,如:111,222,333。然而有些内容是需要替换的,如;111替换成aaa,222替换成bbb,由于需要替换的内容也就是关键词太多了,就把aaa,bbb,ccc,ddd,单独放在b文件里,然后把批量替换后的文件输出保存为c文件。

我在上面贴的那个列子里面的aaa,ccc,就是a文件里面的内容,也是就被替换内容,bbb,ddd,就是b文件里的内容,也就是需要替换成的内容。如果a文件里还有要替换的eee,那b文件里肯定会有fff。
其实主要实现的替换就是类似于下面这两个。
set s=!s:aa=bbb!
set s=!s:ccc=ddd!

不同的是把需要替换成的bbb,ddd内容,放到一个文件里了,所以需要先检查a文件里有没有aaa,ccc,如果有就替换b文件里对应的内容,。
这样的话肯定有问题吧?如果把a文件里需要替换的关键词和b文件一样单独存一个文件,和b文件一样呢?
作者: jrx401    时间: 2016-5-17 15:51

这个我也很想知道,可否哪位大虾请教?
作者: gawk    时间: 2016-5-18 08:37

回复 3# xxoo2


可以考虑把a和b合并成一个文件,分成两列就行了,例如:
aaa bbb
ccc ddd
eee fff
两个文件反而不方便处理
作者: 云中漫步跑    时间: 2018-4-29 15:29

楼主解决了吗,我也有同样需求
作者: tigerpower    时间: 2018-5-2 17:59

参见此帖
注意,如果不在简体中文语言环境下,替换GBK编码的文字,会出错!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2