2010-07-29 215 views
1

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

任何想法?

谢谢!

回答

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 

预期。

我不会使用这个大数目的行号(因为内部循环运行多次行在文件中)。

+0

谢谢paxdiablo!对于大量的线路来说的确有点问题,但对于数量较少的线路来说确实有问题。 – Yon 2010-08-01 07:33:03

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是要从中提取行的文件。

+0

谢谢,但是这样做会使事情变得复杂,而工作方式和其他答案一样。 – Yon 2010-08-01 07:34:39

相关问题