Board logo

标题: [文本处理] [已解决]如何通过批处理,提取文本中以.START到.ENDS开头之间的段落到新的文本中 [打印本页]

作者: Cyccllee    时间: 2014-9-15 11:54     标题: [已解决]如何通过批处理,提取文本中以.START到.ENDS开头之间的段落到新的文本中

文本内容如下:
.START A1 Clk Clr Data Q QB
CB Clk Vd Vd PM25 3 250n
CB Clk Vd Vd PM25 3 250n
.ENDS A1
.START B1 v1p A B Out Obar Gn V
​M1 1 B Gn 0 NM25 1.5 250n
M2 Ot A  0 NM25 1.5 250n
.ENDS B1
提取以.START到.ENDS开头字母之间的段落,并以.ENDS之后的一个单词作为每个新文件的文件名。
作者: apang    时间: 2014-9-15 13:41

  1. @echo off
  2. for /f "tokens=1*" %%a in (a.txt) do (
  3.         if /i "%%a" == ".START" set flag=1
  4.         if defined flag (
  5.                 echo,%%a %%b>>$
  6.                 if /i "%%a" == ".ENDS" (
  7.                         move $ "%%b.txt" & set "flag="
  8.                 )
  9.         )
  10. )
  11. pause
复制代码

作者: Cyccllee    时间: 2014-9-15 13:51

回复 2# apang


感谢回答。

我试用了一下,把a.txt改成了我的文件名字,运行没反应。。。
作者: Cyccllee    时间: 2014-9-15 13:55

回复 2# apang


不好意思。。。太激动,把文件名写错了,你的答案已经完美的解决了我的问题,非常感谢。
作者: Cyccllee    时间: 2014-9-15 15:10

回复 2# apang


您好,再次麻烦一下。

还是差不多的问题,如果我想提取的文本内容,不包括.START和.ENDS本身行,只是它俩行之间的内容,该怎么修改?输出的文件名还是以上的要求。

不甚感激~~~
作者: apang    时间: 2014-9-15 16:20

本帖最后由 apang 于 2014-9-15 17:51 编辑

回复 5# Cyccllee
  1. @echo off
  2. for /f "tokens=1*" %%a in (a.txt) do (
  3.         if defined flag (
  4.                 if /i "%%a" == ".ENDS" (
  5.                         move $ "%%b.txt" & set "flag="
  6.                 ) else echo,%%a %%b>>$
  7.         ) else if /i "%%a" == ".START" set flag=1
  8. )
  9. pause
复制代码

作者: Cyccllee    时间: 2014-9-15 16:58

回复 6# apang


提示系统找不到文件。这次确认文件名是对的。。。
作者: apang    时间: 2014-9-15 17:58

回复 7# Cyccllee


6楼已修改,如果文件名含空格,比如:a b c.txt,请将第2行改成:
  1. for /f "tokens=1*" %%a in ('type "a b c.txt"') do (
复制代码

作者: Cyccllee    时间: 2014-9-15 18:49

回复 8# apang


太开心啦,试验已成功。。。感谢感谢~~




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