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

[文本处理] 批处理如何将若干个文件中特定字符乘以100后重新排列再生成新文件?

本帖最后由 大大火凤凰 于 2011-9-15 09:26 编辑

有以下N个文件 格式相同,数值不同,每个文件的3,5,6行特定位置的数据乘以100后重新排列,在新生成的文件中形成一行,每个数据之间用一个空格分开。以后每个文件的数据在新文件中逐行递增。

100.txt
aaa09aa
sss10ss
aaa11aa
aaa12aa
aaa13aa
aaa14aa

101.txt
aaa19aa
sss20ss
aaa21aa
aaa22aa
aaa23aa
aaa24aa

102.txt
aaa29aa
sss30ss
aaa31aa
aaa32aa
aaa33aa
aaa34aa
... ...

新文件.txt
1100 1300 09 10 12 1400
2100 2300 19 20 22 2400
3100 3300 29 30 32 3400
... ...
请问批处理文件该如何写,请赐教。万分感谢!
奔跑中的蜗牛

回复 1# 大大火凤凰
没看花眼的话,你举的例子中,新文件最后一行倒数第2个数字应该是32吧?
看得多说得多,远比不上写得多。

TOP

没法指教,因为我看了几遍根本就看不懂题意。 看不出原始文件和你新生成的文件的关联
    ╭╩═╮
╭╯G O ╠ 雁过留声
╰⊙═⊙╯

TOP

回复 3# x9tiancmd
猜测每行组成是:第3行数字×100 第5行数字×100 第一行数字 第二行数字 第4行数字 第6行数字×100
看得多说得多,远比不上写得多。

TOP

虽然这个题没有什么学习的意义,还是写了一个。
虽然不怎么通用,但也能用,针对这个题的话,够了。
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. For /L %%Z In (0,1,2) Do (
  3. For /F %%A In (10%%Z.txt) Do (
  4. Set Var=%%A
  5. Set /A N+=1
  6. Set Str!N!=!Var:~3,2!
  7. IF !N! == 3 Set /A Str!N!*=100
  8. IF !N! == 5 Set /A Str!N!*=100
  9. IF !N! == 6 Set /A Str!N!*=100
  10. )
  11. Echo !Str3! !Str5! !%Str1! !Str2! !Str4! !Str6!>>File.txt
  12. )
  13. Start File.txt
复制代码

TOP

回复 5# 冷玉公子
公子没看到楼主的省略号啊,绝不止这三个文本文件哦,要真只有三个,那还不如手动呢。
看得多说得多,远比不上写得多。

TOP

回复 6# weichenxiehou


    第一:有个共同点,文件名称是按数字顺序排列的。
    第二:兄台肯定是没有看到我代码的前两行是什么了吧
  1. For /L %%Z In (0,1,2) Do (
  2. For /F %%A In (10%%Z.txt) Do (
复制代码

          如果文件多就把第一个循环的数字加大就OK了吗。
          我这个很明显是从100开始到102。
          稍微修改下
  1. For /L %%Z In (1,1,200) Do (
  2. For /F %%A In (%%Z.txt) Do (
复制代码

          如果是这样那不就是从1到200了吗。
如果文件名称不统一就把第一个循环换成For /r 了

TOP

回复 2# weichenxiehou


    不好意思 是我写错了 多谢指出。
奔跑中的蜗牛

TOP

回复 2# weichenxiehou


        不好意思 是我写错了 多谢指出。
奔跑中的蜗牛

TOP

回复 7# 冷玉公子
受益匪浅,多谢各位大师帮忙!
奔跑中的蜗牛

TOP

回复 5# 冷玉公子

按照你的方法运行后结果是这样的
1100 1300 09 10 12 1400
1100 1300 09 10 12 1400
1100 1300 09 10 12 1400
我需要的是这样的结果:
1100 1300 09 10 12 1400
2100 2300 19 20 22 2400
3100 3300 29 30 32 3400
请赐教。O(∩_∩)O谢谢!
奔跑中的蜗牛

TOP

回复 8# 大大火凤凰


已经知道写错了,就在顶楼更新一下吧。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /l %%z in (0,1,2) do (
  4.     set n=0
  5.     for /f %%a in (10%%z.txt) do (
  6.         set /a n+=1
  7.         set var=%%a
  8.         set num!n!=!var:~3,2!
  9.         if !n! == 3 (
  10.             set /a num!n!*=100
  11.         ) else if !n! == 5 (
  12.             set /a num!n!*=100
  13.         ) else if !n! == 6 (
  14.             set /a num!n!*=100
  15.         )
  16.     )
  17.     echo !num3! !num5! !%num1! !num2! !num4! !num6!
  18. ))>file.txt
复制代码

TOP

回复 13# awk


    成功了!O(∩_∩)O哈哈~ 太感谢你们了!
奔跑中的蜗牛

TOP

真是太强了哦

TOP

返回列表