我有大约 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
先。
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 对于/f- 循环命令以执行另一个命令的结果。
- 查找字符串- 在文件中搜索字符串。
答案2
您
sed
甚至可以使用或grep
从文本文件中输出一行。(哦,我看你是用 Windows 的。如果你没有
grep
安装sed
,你应该可以使用findstr
。)- 将此命令循环放在所需的文件上。
- 将输出重定向到文件。