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

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

[复制链接]
发表于 2011-9-14 19:23:54 | 显示全部楼层 |阅读模式
本帖最后由 大大火凤凰 于 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
... ...
请问批处理文件该如何写,请赐教。万分感谢!
发表于 2011-9-14 19:53:09 | 显示全部楼层
回复 1# 大大火凤凰
没看花眼的话,你举的例子中,新文件最后一行倒数第2个数字应该是32吧?
发表于 2011-9-14 20:32:59 | 显示全部楼层
没法指教,因为我看了几遍根本就看不懂题意。 看不出原始文件和你新生成的文件的关联
发表于 2011-9-14 20:44:45 | 显示全部楼层
回复 3# x9tiancmd
猜测每行组成是:第3行数字×100 第5行数字×100 第一行数字 第二行数字 第4行数字 第6行数字×100
发表于 2011-9-14 20:48:28 | 显示全部楼层
虽然这个题没有什么学习的意义,还是写了一个。
虽然不怎么通用,但也能用,针对这个题的话,够了。

  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
复制代码
发表于 2011-9-14 20:53:46 | 显示全部楼层
回复 5# 冷玉公子
公子没看到楼主的省略号啊,绝不止这三个文本文件哦,要真只有三个,那还不如手动呢。
发表于 2011-9-14 21:13:24 | 显示全部楼层
回复 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 了
 楼主| 发表于 2011-9-14 23:27:03 | 显示全部楼层
回复 2# weichenxiehou


    不好意思 是我写错了 多谢指出。
 楼主| 发表于 2011-9-14 23:30:23 | 显示全部楼层
回复 2# weichenxiehou


        不好意思 是我写错了 多谢指出。
 楼主| 发表于 2011-9-14 23:41:11 | 显示全部楼层
回复 7# 冷玉公子
受益匪浅,多谢各位大师帮忙!
 楼主| 发表于 2011-9-15 00:15:54 | 显示全部楼层
回复 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谢谢!
发表于 2011-9-15 07:45:45 | 显示全部楼层
回复 8# 大大火凤凰


已经知道写错了,就在顶楼更新一下吧。
发表于 2011-9-15 07:59:26 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2011-9-15 09:33:07 | 显示全部楼层
回复 13# awk


    成功了!O(∩_∩)O哈哈~ 太感谢你们了!
发表于 2011-9-15 17:04:00 | 显示全部楼层
真是太强了哦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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