批处理以获取子文件夹中多个文本文件中两个字符串之间的行

时间:2016-11-10 12:36:37

标签: batch-file subdirectory

我有一系列文本文件,每个文件在某个目录的子文件夹中命名相同

ac.txt文件具有以下结构:

---

some text

---

[lights]

---

some text

---

[GetEngineData]

---

some text

---

我想在一个名为lights.txt的单个输出文件中获取字符串[lights]和[GetEngineData]之间的所有行(包括那些开始[lights]和end [GetEngineData]行),其间有空格来自每个文本文件。

我对以下批次进行了编码,但到目前为止无济于事:

@ECHO OFF 
for /r %%a in ('find /n "[lights]"^<(ac.txt) ') do set /a start=%%a
for /r %%a in ('find /n "[GeneralEngineData]"^<(ac.txt) ') do set /a end=%%a
(
    for /r  %%a in ('find /n /v ""^<(ac.txt) ') do (
        IF %%a geq %start% IF %%f leq %end% ECHO(%%b
    )
)>lights.txt

1 个答案:

答案 0 :(得分:1)

这是一种方法。可能不是最有效但似乎做得很好。代码循环遍历所有子文件夹并获取所有 .TXT 文件。然后它会解析每个文件的每一行,使用[lights][GeneralEngineData]标记标记每个块的开头/结尾,然后将所有内容输出到同一文件夹中的 res.txt 存储批处理文件的位置。

@ECHO OFF 
Setlocal EnableDelayedExpansion
if exist res.txt del res.txt

set inblock=0
for /r . %%a in (*.txt) do (
    set fname=%%a
    for /f "tokens=1* delims=]" %%b in ('type "!fname!" ^| find /n /v ""') do (
        if /i *%%c*==*[lights]* set inblock=1
        if !inblock!==1 (
            if *%%c*==** (echo.) else (echo %%c)
            if /i *%%c*==*[GetEngineData]* set inblock=0
        )
    )
    echo. 
) >> res.txt
set fname=
set inblock=
type res.txt