提取文本指定的行
以下代码都未考虑文本中有空行的情况。其中n为指定的行。
代码一、
不产生临时文件,利用for的skip跳过指定行的前面的行,
当指定行为第一行时则自动省略skip参数。- @echo off
- set /a n=10
- set /a n-=1
- call :loop %n%
- pause
- :loop
- if %n% lss 1 (set skip=) else (set skip=skip=%n%)
- for /f "%skip% delims=" %%a in (a.txt) do echo %%a&goto :EOF
- goto :EOF
复制代码 代码二、
利用more跳过指定行的前面行,当指定行为第一行时则自动用type来取代more- @echo off
- set /a n=10
- set /a n-=1
- call :loop %n%
- pause
- :loop
- if %n% lss 1 (set skip=type) else (set skip=more +%n%)
- for /f "delims=" %%a in ('%skip% a.txt') do echo %%a&goto :EOF
- goto :EOF
复制代码 代码三、
利用findstr首先将每行加上行号,在用findstr提取以指定行加冒号开头的行。- @echo off
- set /a n=10
- for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.txt^|findstr /b %n%:')do echo %%b
- pause
复制代码 代码四、
用goto跳出for
:- @echo off&setlocal enabledelayedexpansion
- set /a n=10
- for /f "delims=" %%a in (a.txt) do (
- set /a max+=1
- if !max! equ %n% set var=%%a&goto loop
- )
- :loop
- echo %var%
- pause
复制代码 代码五、
产生临时文件,适合大文本,原理同上。- @echo off
- set /a n=10
- findstr /n .* a.txt|findstr /b %n%:>tem
- set /p var=<tem
- echo %var:*:=%
- pause
复制代码
|