【问题标题】:Batch to get lines between two strings in multiple text files in subfolders批处理以获取子文件夹中多个文本文件中两个字符串之间的行
【发布时间】:2016-11-10 12:36:36
【问题描述】:

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

ac.txt 文件的结构如下:

---

some text

---

[lights]

---

some text

---

[GetEngineData]

---

some text

---

我想将字符串 [lights] 和 [GetEngineData] 之间的所有这些行(包括那些开始 [lights] 和结束 [GetEngineData] 行)放在一个名为lights.txt 的输出文件中,并在它们之间留一个空格来自每个文本文件。

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

@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

【问题讨论】:

  • 您不能使用FOR /R 来处理命令的输出。使用FOR /F 来做到这一点。我不确定你想将文件掩码放在括号内做什么。
  • 您说您的文本文件“都命名相同”,那么为什么要查看每个扩展名为 .txt 的文件,而不仅仅是在 knownfilename.txt 中?
  • @Compo 它没有任何区别,因为子文件夹中没有任何其他文本文件以不同的名称命名,即 *.txt 或 ac.txt
  • @aschipfl 它是针对单个文件的,我正在为子文件夹中的所有 .txt 文件运行批处理,但仍然可以查看它,谢谢

标签: batch-file subdirectory


【解决方案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

【讨论】:

  • 我很快就会试一试
  • 那个很好用,谢谢!刚刚在 if 语句中添加了 /i 以忽略任何可能的大小写敏感性。
  • 它只会在[lights][GeneralEngineData] 之间添加数据集失败,以防[lights] 行之后有一个空行。
  • 我只是更改了内部循环以考虑空行(FOR 命令总是剥离)。我不得不使用一个巧妙的小技巧来解释in this other SO post。现在一切都应该按预期工作。
  • 这一次,它处理所有出现的[lights],有或没有后面的空行,但无法单独解析中间的数据,准确地输出所有内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 2020-04-01
  • 1970-01-01
相关资源
最近更新 更多