我試圖找到一種在Windows批處理中打印文本文件特定行的相當有效的方法。它必須是Windows Batch,並且沒有其他工具(gwk.exe,perl,python,javascript等)。我有一個行號列表(1,7,15,20等),它們可以相當長(幾十甚至更多)。在Windows批處理中打印文本文件的特定行
任何想法?
謝謝!
我試圖找到一種在Windows批處理中打印文本文件特定行的相當有效的方法。它必須是Windows Batch,並且沒有其他工具(gwk.exe,perl,python,javascript等)。我有一個行號列表(1,7,15,20等),它們可以相當長(幾十甚至更多)。在Windows批處理中打印文本文件的特定行
任何想法?
謝謝!
下面是一個腳本,顯示如何做到這一點。這不是最有效的世界,但命令腳本很少有:-)
@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
預期。
我不會使用這個大數目的行號(因爲內部循環運行多次每行在文件中)。
你可以使用一些簡單的批處理文件:
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是要從中提取行的文件。
謝謝,但是這樣做會使事情變得複雜,而工作方式和其他答案一樣。 – Yon 2010-08-01 07:34:39
謝謝paxdiablo!對於大量的線路來說的確有點問題,但對於數量較少的線路來說確實有問題。 – Yon 2010-08-01 07:33:03