我有一系列文本文件,每个文件在某个目录的子文件夹中命名相同
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
答案 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