批处理脚本提取特定单词之间的行并重新格式化输出文件

时间:2015-07-03 17:52:35

标签: windows batch-file

我有一个格式为“test.txt”的文件:

xdfdfdf
ydffddf
zddfdfd
blah ...
WordA
12
23
45
...
32
12
65
xdfdfdf
ydffddf
zddfdfd
blah ...
WordA
54
76
67
...
68
31
85
xdfdfdf
ydffddf
zddfdfd
blah ...
WordA
89
65
45
...
32
51
75
xdfdfdf
ydffddf
zddfdfd
blah ...
....

我想在每个“wordA”下面仅提取数字,使用 2跳过格式重新格式化连续数据制作输出文件(如“Output.txt”)。必须注意的是,具有数字数据的每个“wordA”下的行号是固定的(例如18行)。

结果应采用以下格式:

12 45 ... 32 65
54 67 ... 68 85
89 45 ... 32 75
....

有人可以帮助我度过难关吗?我找到了FindRepl.bat,但是,我无法使用我想要的东西。我更喜欢简单而简洁。 我对批处理脚本编程知之甚少,也尝试为它编写嵌套循环,但它不起作用。

@echo off
setlocal enabledelayedexpansion

SET InFile=Test2.txt
SET OutFile=Output.txt
IF EXIST %OutFile% del /F %OutFile%

FOR /f "delims=:" %%a IN ('findstr /n "wordA" "%InFile%"') DO (
   SET /a first=%%a + 1
   SET /a last=%%a + 18
   SET i=0
   SET ROW=!first!

   FOR /f "skip=!first! delims=" %%b IN (%InFile%) DO (
      if !first! LEQ !last! set Data[!i!]=%%a 
      echo %%b
   )
)

endlocal

1 个答案:

答案 0 :(得分:1)

@echo off
setlocal EnableDelayedExpansion

SET InFile=Test2.txt
SET OutFile=Output.txt

set "i="
(for /F "delims=" %%a in (%InFile%) do (
   if defined i (
      set /A i+=1, odd=i%%2
      if !odd! equ 1 set "line=!line! %%a"
      if !i! equ 18 (
         echo !line:~1!
         set "i="
      )
   ) else if "%%a" equ "WordA" (
      set i=0
      set "line="
   )
)) > %OutFile%