Board logo

标题: [文本处理] [已解决]批处理如何修改多个TXT文件中的多个数字 [打印本页]

作者: lixsh2000    时间: 2015-11-19 00:39     标题: [已解决]批处理如何修改多个TXT文件中的多个数字

前面有“修改多个TXT文件中的多个数字”的问题,在网上搜并学习修改,解决了,是VBS。
无意中发现批处理之家,又碰到“批处理修改数字作为文件名中的某个数字”的问题,在网上弄半天不得要领,于是在这里发贴,没想到 会飞的蜗牛丶 今天就给解决了,当然还闹了笑话,我弄成VBS,执行错误。无意中转成BAT,成功了。
向会飞的蜗牛丶表示感谢。
问题来了,二个问题是处理同时一批文件,目前我一个是VBS(修改各个文档内的内容),一个是BAT(修改文档名),分别各点一下也无妨,但我还是想合到一个文件里,呵呵。
我就单独再问一下:
若干TXT文件,每个文档内都是多组数字组成,批处理修改每个文档内的其中多个数字,要修改如:2015批修改成2013  2014批修改成2012 等。如何BAT实现。
谢谢。
作者: 依山居    时间: 2015-11-19 06:42

  1. fr -s *.txt -f:2015 -t:2013
复制代码

作者: DAIC    时间: 2015-11-19 09:25

  1. sed -i -e "s/2015/2013/g" -e "s/2014/2012/g" *.txt
复制代码

作者: lixsh2000    时间: 2015-11-19 10:36

对不起,可能是我表述错误,应该是:2015/10/15改成2013/10/15.刚试了上述二个方法,又看了数据,发现可能表述错了,二个表述不同可能方法不同。
作者: 依山居    时间: 2015-11-19 10:47

2015 改成2015/10/15很难吗,不需要智商的吧。
作者: lixsh2000    时间: 2015-11-19 10:59

VBS方法
Set WshShell = CreateObject("Wscript.Shell")
WshShell.Run "cmd /c dir /s/b *.txt > list.txt",vbHide
Wscript.Sleep 1000
sFile = "list.txt"  
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set oFile = objFSO.OpenTextFile(sFile,1)
Do While Not oFile.AtEndOfStream
strLine = oFile.ReadLine
If Len(strLine) > 0 Then
Set File = objFSO.OpenTextFile(strLine, 1)      
aryLines = File.ReadAll
File.Close      
aryLines = Replace(aryLines, "2015", "2010")
aryLines = Replace(aryLines, "2014", "2009")
aryLines = Replace(aryLines, "2013", "2008")
aryLines = Replace(aryLines, "2012", "2007")
aryLines = Replace(aryLines, "2011", "2006")
Set File = objFSO.OpenTextFile(strLine, 2)   
File.Write aryLines            
File.Close
End If
Loop
oFile.Close            
objFSO.DeleteFile sFile
Set objFSO = Nothing
msgbox "完毕",0,"标题"
作者: lixsh2000    时间: 2015-11-19 12:53

回复 5# 依山居

呵呵,编程方面确实没有智商,我是学机械的,喜欢学习,但年经大了,要深入学习已经不行了,浅浅地研究一下。
作者: DAIC    时间: 2015-11-19 13:13

回复 4# lixsh2000
  1. sed -i -e "s#2015/10/15#2013/10/15#g" -e "s#2014/10/15#2012/10/15#g" *.txt
复制代码

作者: 会飞的蜗牛丶    时间: 2015-11-19 13:46

确实没看懂
作者: lixsh2000    时间: 2015-11-19 15:03

本帖最后由 lixsh2000 于 2015-11-19 15:17 编辑

回复 9# 会飞的蜗牛丶


    多个TXT,每个其中数据:

2015/11/12 23.23 24.96 23.20 24.39 165374088 3993103872.00
2015/11/13 23.96 26.83 23.52 25.89 239326677 6100945920.00
2015/11/16 25.20 26.16 25.07 25.82 127833168 3269311744.00
2015/11/17 26.20 26.45 24.72 24.78 124011229 3179117568.00
2015/11/18 24.70 25.00 23.30 23.50 111448365 2679235328.00
2015/11/19 23.75 23.86 23.30 23.67 19486700 460364640.00
。。。。。。。
2014/11/25 11.00 11.38 10.96 11.33 60905539 838623872.00
2014/11/26 11.42 11.53 11.13 11.26 47903478 661834176.00
2014/11/27 11.42 11.81 11.32 11.39 75928674 1076213632.00
2014/11/28 11.23 11.27 10.94 11.06 54866135 747219200.00
2014/12/01 11.08 11.13 10.83 11.02 30803402 413931520.00
2014/12/02 11.00 11.11 10.90 11.03 31314176 423780608.00
。。。。。。。


改成:
2013/11/12 23.23 24.96 23.20 24.39 165374088 3993103872.00
2013/11/13 23.96 26.83 23.52 25.89 239326677 6100945920.00
2013/11/16 25.20 26.16 25.07 25.82 127833168 3269311744.00
2013/11/17 26.20 26.45 24.72 24.78 124011229 3179117568.00
2013/11/18 24.70 25.00 23.30 23.50 111448365 2679235328.00
2013/11/19 23.75 23.86 23.30 23.67 19486700 460364640.00
。。。。。。。
2012/11/25 11.00 11.38 10.96 11.33 60905539 838623872.00
2012/11/26 11.42 11.53 11.13 11.26 47903478 661834176.00
2012/11/27 11.42 11.81 11.32 11.39 75928674 1076213632.00
2012/11/28 11.23 11.27 10.94 11.06 54866135 747219200.00
2012/12/01 11.08 11.13 10.83 11.02 30803402 413931520.00
2012/12/02 11.00 11.11 10.90 11.03 31314176 423780608.00
。。。。。。。
2015-----改成了2013
2014-----改成了2012
如何批处理。
不好意思。
以上数据我用上面的VBS改成功了。现在想用BAI批处理。然后合并到你昨天给我的批处理中,实现:对每个TXT中的以上数据修改内容,然后对TXT文件改名,呵呵。
作者: WHY    时间: 2015-11-19 15:24

回复 10# lixsh2000


    把8楼代码保存为test.bat,点击8楼签名处,下载 sed.exe,把 sed.exe 和你需要处理的文本以及test.bat放在同一文件夹下,双击运行test.bat
作者: WHY    时间: 2015-11-19 15:31

如果所有代码都必须像这样来一段使用说明,我猜没人再回复了,更别说写代码了
作者: 依山居    时间: 2015-11-19 16:03

提问请上实际数据文件片段,传网盘放链接。
作者: lixsh2000    时间: 2015-11-19 16:06

前天才注册,没有注意各种方法,向各位表示歉意
作者: 依山居    时间: 2015-11-19 16:46

  1. goto code
  2. ::注释区
  3. 替换文本中的行首年份
  4. fr 下载方法同sed
  5. 或者安装batch-cn 输入bcn gt fr可以完成下载
  6. http://baiy.cn/utils/fr/index.htm
  7. :code
  8. copy a1.txt aa1.txt /y
  9. ::fr aa1.txt -r:(^2015)(/\d+/\d+) -t:"2013\2"
  10. ::fr aa1.txt -r:(^2014)(/\d+/\d+) -t:"2012\2"
  11. ::使用^限定替换行首的年份
  12. fr aa1.txt -r:^2015 -t:2013
  13. fr aa1.txt -r:^2014 -t:2012
  14. pause
复制代码

作者: lixsh2000    时间: 2015-11-19 17:31

谢谢各位,我以为是如上VBS中的语法或会飞的蜗牛丶给我另一个问题那样写的BAT语法,不知道还要装一个FR。我还在困惑怎么只有一行那么简单。
再次谢谢。
作者: 依山居    时间: 2015-11-19 19:00

回复 16# lixsh2000


   找时间学正则表式呗。




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