将多个 .txt 文件的特定行合并为一个 .txt 文件的脚本

将多个 .txt 文件的特定行合并为一个 .txt 文件的脚本

我有大约 800 个 .txt 文件。我需要提取每个文件的名称以及文件中的一行,然后将其导出到新的 .txt 文件中。

我需要复制的行始终以“系统启动时间:”开头

我希望它在新的 .txt 文件中输出如下内容:

txt文件1

系统启动时间:xx/xx/xxxx

txt文件2

系统启动时间:xx/xx/xxxx

txt文件3

系统启动时间:xx/xx/xxxx

ETC...

我可以使用什么命令来做到这一点?

答案1

我需要提取每个文件的名称和文件内的一行,然后将其导出到一个新的 .txt 文件。

我需要复制的行总是以System Boot Time:

我希望它在新的 .txt 文件中输出如下内容:

txtfile1
System Boot Time: xx/xx/xxxx
txtfile2
System Boot Time: xx/xx/xxxx
txtfile3
System Boot Time: xx/xx/xxxx

使用以下批处理文件。

合并.cmd:

@echo off
setlocal 
for /f "useback delims=: tokens=1-3" %%i in (`findstr /C:"System Boot Time:" "*.txt"`) do (
  echo %%i >> new.txt
  echo %%j:%%k >> new.txt
)
endlocal

示例输出:

F:\test>type ?.txt

1.txt


System Boot Time: 01/01/1900

2.txt


System Boot Time: 01/02/2003

3.txt


System Boot Time: 02/03/2004
    
F:\test>merge

F:\test>type new.txt
1.txt
System Boot Time: 01/01/1900
2.txt
System Boot Time: 01/02/2003
3.txt
System Boot Time: 02/03/2004

笔记:

  • 搜索所有匹配的文件*.txt以查找与“系统启动时间”匹配的字符串
  • 结果输出至new.txt
  • 如果您想要Merge.cmd多次运行,请记住del new.txt先。

进一步阅读

答案2

  • sed甚至可以使用或grep从文本文件中输出一行。

    (哦,我看你是用 Windows 的。如果你没有grep安装sed,你应该可以使用findstr。)

  • 将此命令循环放在所需的文件上。
  • 将输出重定向到文件。

相关内容