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

[文本处理] [已解决]批处理从多个文本文件中提取特定内容组成一个新的文本

本人对批处理了解的不是太多,老大安排了一个批处理的TOOL要做,是在不知道如何下手啊,请教各位了,十分感谢。时间挺紧的
需求如下:
1.输入folder的路径,里面存有多个文本文件(比如 a.txt,b.txt,c.txt等等)
2.这些txt文件有一个共同特点,都有下面一部分,即两个文件比较的结果

没有区别的显示如下(假设a.txt里面包含的内容是):
Diffcount [文件路径1] and [文件路径2] result:
LANG ADD MOD DEL A&M BLK CMT NBNC RATE
-----------------------------------------------------------------------
-----------------------------------------------------------------------
  Convert all NBNC lines to standard C
      Total: 0.00  (standard C lines)

有区别的显示如下(假设b.txt里面包含的内容是):
Diffcount [文件路径3] and [文件路径4] result:
LANG ADD MOD DEL A&M BLK CMT NBNC RATE
-----------------------------------------------------------------------
Config 4 6 0 10 0 0 10 0.12
XML 707 228 171 935 0 0 935 0.12
-----------------------------------------------------------------------
  Convert all NBNC lines to standard C
      Total: 113.40  (standard C lines)

(假设C.txt里面包含的内容是):
Diffcount [文件路径5] and [文件路径6] result:
LANG ADD MOD DEL A&M BLK CMT NBNC RATE
-----------------------------------------------------------------------
JAVA 4 6 0 10 0 0 10 0.12
-----------------------------------------------------------------------
  Convert all NBNC lines to standard C
      Total: 155.40  (standard C lines)

3.现在我想得到这样的一个新的txt文本(具体路径可以设死,也可以我自己来指定),显示如下

NAME   LANG ADD MOD DEL A&M BLK CMT NBNC RATE
-----------------------------------------------------------------------
a  
b  Config 4 6 0 10 0 0 10 0.12
b  XML 707 228 171 935 0 0 935 0.12
c  JAVA 4 6 0 10 0 0 10 0.12
...
...
-----------------------------------------------------------------------


格式差不多就是这样,具体也可以变动,但要把这些结果显示出来

老弟实在是不知道如何下手,不想在老大面前太丢人了,时间比较紧,期待大家的帮助,谢谢, 在线等大家的帮助,再次感谢已解决

[ 本帖最后由 zzj86673123 于 2009-8-9 12:58 编辑 ]
1

评分人数

    • batman: 感谢主动给标题标注[已解决]字样PB + 2

前前后后看了三遍楼主对问题的描述,终于明白了一些,但还是存在着疑问,还请楼主
附上原始的部分文件,特别是你描述中的a.txt。。。
***共同提高***

TOP

补充

a.txt的意思是[文件路径1] 和 [文件路径2 里面对应的文件是相同版本,没有区别,所以结果在两个横线之间是空
a.txt的源文件:

LANG        ADD        MOD        DEL        A&M        BLK        CMT        NBNC        STATE        BASELINE FILE        TARGET FILE

Diffcount [文件路径1] and 文件路径2] result:

LANG        ADD        MOD        DEL        A&M        BLK        CMT        NBNC        RATE
-----------------------------------------------------------------------
-----------------------------------------------------------------------
  Convert all NBNC lines to standard C
      Total: 0.00  (standard C lines)


b.txt的意思是[文件路径3] 和 [文件路径4】 里面对应的文件是不同版本 ,所以有区别
b.txt源文件是:
LANG        ADD        MOD        DEL        A&M        BLK        CMT        NBNC        STATE        BASELINE FILE        TARGET FILE
Config        4        6        0        10        0        0        10        MOD        1551_cnh1011163.cfg        1551_cnh1011163.cfg
XML        0        5        0        5        0        0        5        MOD        TTY_HCO.xml        TTY_HCO.xml
XML        0        7        2        7        0        0        7        MOD        TTY_HCO_farfield.xml        TTY_HCO_farfield.xml
XML        0        3        0        3        0        0        3        MOD        farfield_PHF_ring.xml        farfield_PHF_ring.xml


Diffcount [文件路径3] and [文件路径4] result:

LANG        ADD        MOD        DEL        A&M        BLK        CMT        NBNC        RATE
-----------------------------------------------------------------------
Config        4        6        0        10        0        0        10        0.12
XML        707        228        171        935        0        0        935        0.12
-----------------------------------------------------------------------
  Convert all NBNC lines to standard C
      Total: 113.40  (standard C lines)

TOP

请楼主先测试吧:
  1. @echo off&setlocal enabledealyedexpansion
  2. set /p _path=请输入要操作的目录全路径(请注意要以\结尾):
  3. set "fg=-----------------------------------------------------------------------"
  4. echo NAME   LANG ADD MOD DEL A^&M BLK CMT NBNC RATE>d:\new.txt
  5. echo %fg%>>d:\new.txt
  6. for /f "delims=" %%a in ('dir /s /b %_path%*.txt') do (
  7.      for /f "skip=2 delims=" %%b in (%%a) do (
  8.           if "%%b" equ "%fg%" (
  9.              set /a n+=1
  10.              ) else (
  11.              if "!n!" equ "1" set "flag=a"&echo %%~na %%b>>d:\new.txt
  12.           )
  13.      )
  14.      if not defined flag echo %%~na>>d:\new.txt
  15.      set /a n=0&set "flag="
  16. )
  17. echo %fg%>>d:\new.txt
  18. start d:\new.txt
复制代码

[ 本帖最后由 batman 于 2009-8-8 13:22 编辑 ]
***共同提高***

TOP

  说实话,我们连看了好几遍,都没有理解楼主的准确意图。楼主最好不要只是举例说明,而是要用文字说明文件的规律及你的准确意图,让别人帮你总结规律不是好的求助方式:别人往往会把规律总结错的!
  另外,请在顶楼以附件的形式上传部分原始文件,涉及隐私的部分可作替换处理——数据的格式对代码的编写至关重要,而帖子正文会把数据格式做一些修改。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

什么乱七八糟的,问题提不好让人看了烦躁
Still with wax

TOP

补充二

谢谢大家的关注,可能是我阐述的不清楚。我下午去单位把文本文件的源码贴过来。
谢谢,batman,但是代码执行结束的结果是
-----------------------------------------------------------------------
a
b
c
-----------------------------------------------------------------------

没有具体的数据。不知道是什么地方出问题了??还请指导啊

TOP

貌似楼主想把两横线间的内容提取出来

TOP

原帖由 zzj86673123 于 2009-8-8 10:36 发表
谢谢大家的关注,可能是我阐述的不清楚。我下午去单位把文本文件的源码贴过来。
谢谢,batman,但是代码执行结束的结果是
-----------------------------------------------------------------------
a
b
c
-- ...

估计是%fg%的问题,楼主在测试时最好将我代码的分隔线替换成你源文件上的分隔线。
***共同提高***

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. set /p ph=请输入目录路径:
  3. set "fg=-----------------------------------------------------------------------"
  4. >"%ph%\new.txt" echo NAME   LANG ADD MOD DEL A^&M BLK CMT NBNC RATE
  5. >>"%ph%\new.txt" echo %fg%
  6. for /f "delims=" %%a in ('dir /s /b /a-d %ph%\*.txt') do (
  7.      for /f "skip=2 usebackq delims=" %%b in ("%%a") do (
  8.      if "%%b"=="%fg%" (
  9.      if defined flag (set flag=&if not defined %%~na >>"%ph%\new.txt" echo %%~na)else set flag=f
  10.    ) else if defined flag >>"%ph%\new.txt" echo;%%~na %%b&set "%%~na=a"
  11. ))
  12. >>"%ph%\new.txt" echo %fg%
  13. start "" "%ph%\new.txt"
复制代码
1

评分人数

TOP

感谢大家

谢谢各位了,已经实现了,十分感谢。

TOP

返回列表