在Windows批处理中打印文本文件的特定行

时间:2010-07-29 10:52:40

标签: windows batch-file

我正在尝试找到一种在Windows批处理中打印文本文件的特定行的相当有效的方法。它必须是Windows Batch,没有其他工具(gwk.exe,perl,python,javascript等等)。我有一个行号列表(1,7,15,20等),它们可能相当长(如果不是更多的话,还有几十个)。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

这是一个脚本,显示了如何做到这一点。它不是世界上效率最高的,但命令脚本很少是: - )

@setlocal enableextensions enabledelayedexpansion
@echo off
set lines=1 7 15 20
set curr=1
for /f "delims=" %%a in ('type infile.txt') do (
    for %%b in (!lines!) do (
        if !curr!==%%b echo %%a
    )
    set /a "curr = curr + 1"
)
endlocal

当在包含line N的文件上运行N(范围从1到24)时,您会得到:

line 1
line 7
line 15
line 20

正如所料。

我不会将此用于非常多的行号(因为内部循环对文件中的每个行多次运行)。

答案 1 :(得分:0)

您可以使用几个简单的批处理文件:

main.bat:

@echo off
set k=0
for /f "tokens=1*" %%i in (%1) do call helper %%i %%j

helper.bat:

@echo off
for /f %%j in (numbers.txt) do if /I %k% equ %%j echo %1 %2
set /A k=%k%+1

然后提供一个numbers.txt文件,其中包含您要打印的行号,每行一个,并将其命名为:

main.bat my_file.txt

其中my_file.txt是您要从中提取行的文件。