我有一堆文本文件,我需要从中提取第 9 行并将其写入另一个文件。
我知道我可以使用
for %%f in (*.txt) de ( )
迭代特定目录中的文件,并且我知道我可以使用 echo
将提取的任何内容附加到不同的文件中,但我不知道如何具体提取第 n 行当前文件(即第 9 行)。
您还可以迭代命令(序列)的输出:
for /f "delims=" %%a in ('dir') do echo %%a
您只需找到第 n 行即可,使用
/N
的 findstr
开关即可轻松实现:
findstr /n "^" file.txt
(找到每行都有一个开头(每行都有)并编号)
过滤所需的行:
findstr /n "^" file.txt |findstr /b "9:"
(过滤以
9:
开头的每一行)
并使用
for
循环来剖析行号和实际行:
for /f "tokens=1* delims=:" %a in ('findstr /n "^" file.txt ^|findstr /b "9:"') do @echo %b
使用另一个
for
循环来处理多个文件:
for %%f in (*.txt) do (
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%%f" ^|findstr /b "9:"') do @echo %%b
)
并将整个输出重定向到一个新文件:
@echo off
(for %%f in (*.txt) do (
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%%f" ^|findstr /b "9:"') do @echo %%b
))>file.out
注意:如果您将输出文件命名为
.txt
,它也可能会被 for %%f in (*.txt)
处理(这就是 for %%f
的工作原理:在每次迭代中从磁盘获取文件名)。
如果您希望输出文件具有相同的扩展名,则您的外循环需要不同的版本:
for /f "delims=" %%f in ('dir /b *.txt') do
首先构建文件名列表,然后迭代此列表,因此在此过程中创建的文件将被忽略。