如何在Windows中使用cmd提取文本文件的第n行?

问题描述 投票:0回答:1

我有一堆文本文件,我需要从中提取第 9 行并将其写入另一个文件。

我知道我可以使用

for %%f in (*.txt) de ( )
迭代特定目录中的文件,并且我知道我可以使用
echo
将提取的任何内容附加到不同的文件中,但我不知道如何具体提取第 n 行当前文件(即第 9 行)。

windows batch-file
1个回答
0
投票

您还可以迭代命令(序列)的输出:

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

首先构建文件名列表,然后迭代此列表,因此在此过程中创建的文件将被忽略。

© www.soinside.com 2019 - 2024. All rights reserved.