子函数对指定文件指的读取指定的行(ReadLine.bat)
使用也比较简单:"Call ReadLine <文件名> <跳过的行数> <读取行数>"就可以了。比如在一个批处理里加上一句"Call ReadLine a.txt 5 7",那么将跳过a.txt文件的前5行,显示下面的7行字符,也包含空行。也可以不指定第三个参数。
ReadLine.Bat
if "%1"=="" (goto --help) else (set file=%~s1)
if "%2"=="" (set first="delims=: tokens=1*") else (set first="skip=%2 delims=: tokens=1*")
if "%3"=="" (
for /f %first% %%a in ('findstr /n .* %file%') do echo/%%b
goto :EOF
)
set last=%3
set loop=0
for /f %first% %%a in ('findstr/n .* %file%') do (
if not defined lxmxn (echo/%%b&set /a loop+=1) else (goto :EOF)
if "!loop!"=="%last%" set lxmxn=Nothing
)
GOTO :EOF
:--help
echo/======================================
echo/本程序段需要带参数才能正常运行
echo/&echo/Usage:&echo/Call ReadLine ^<文件名^> ^<跳过行数^> ^<读取行数^>
echo/&echo/例如:call ReadLine aa.txt 5 7 ,将跳过aa.txt文件的前5行,读取下面的7行字符
echo/&echo/如果^<跳过行数^>没有指定,就从文件第一行读取
echo/&echo/指定^<读取行数^>时必须指定^<跳过行^>
echo/======================================
goto :eof
-----------------------------------------------------------------------------------------
『第 7 楼』:
我暂时想不到用版主的文件只读取第一行的方法,所以擅自改动了一下,把参数2和参数3换了一下位置,用ReadLine a.txt 1即可读取第一行,用ReadLine a.txt 1 1读取第二行。谢谢版主,这个文件很好用,同时还望版主见谅。
if "%1"=="" (goto --help) else (set file=%~s1)
if "%3"=="" (set first="delims=: tokens=1*") else (set first="skip=%3 delims=: tokens=1*")
if "%2"=="" (
for /f %first% %%a in ('findstr /n .* %file%') do echo/%%b
goto :EOF
)
set last=%2
set loop=0
for /f %first% %%a in ('findstr/n .* %file%') do (
if not defined lxmxn (echo/%%b&set /a loop+=1) else (goto :EOF)
if "!loop!"=="%last%" set lxmxn=Nothing
)
GOTO :EOF
:--help
echo/======================================
echo/本程序段需要带参数才能正常运行
echo/&echo/Usage:&echo/Call ReadLine ^<文件名^> ^<读取行数^> ^<跳过行数^>
echo/&echo/例如:call ReadLine aa.txt 5 7 ,将跳过aa.txt文件的前7行,读取下面的5行字符
echo/&echo/如果^<跳过行数^>没有指定,就从文件第一行读取
echo/======================================
goto :eof
-----------------------------------------------------------------------------------------
『第 8 楼』:
跳过行数是零不就能读取第一行了吗?
-----------------------------------------------------------------------------------------
『第 10 楼』:
可以运行原文件的ReadLine a.txt 0 1,看有什么提示,在我这里会提示错误
-----------------------------------------------------------------------------------------
『第 12 楼』:
你这个写的有点复杂。其实解决办法可以简化一点。
@echo off
setlocal EnableDelayedExpansion
set loop=0
set /a skipline=%2-1
for /f "tokens=1 skip=%skipline% delims=" %%a in (%1) do (
set /a loop=!loop!+1
if "!loop!" leq "%3" (echo %%a) else goto :eof
)
goto :eof
-----------------------------------------------------------------------------------------
『第 13 楼』:
测试以上各楼层大神的版本,好像用起来总有点不手,擅自改动如下,自用时目前满足所有情况,还请多指教。
:ReadLine <DataFileName> <skipline> <readline>
:: DataFileName 待读入文件
:: skipline 跳过行数,空或非有效数字则默认为0
:: readline 读取行数,空或非有效数字则默认为0,0则表示为剩余的全部
@echo off&SetLocal ENABLEDELAYEDEXPANSION
if "%1"=="" goto :--help
set /a loop=0
set /a skipline=%~2+0
set /a readline=%~3+0
if %skipline% lss 1 (
set "for_var=usebackq tokens=1 delims="
) else (
set "for_var=usebackq tokens=1 skip=%skipline% delims="
)
if %readline% lss 1 (
set /a step=0
set /a readline=1
) else (
set /a step=1
)
for /f "%for_var%" %%a in ("%~f1") do (
set /a loop+=step
if !loop! leq %readline% (echo %%a) else goto :eof
)
goto :eof
:--help
echo/======================================
echo / 本程序段需要带参数才能正常运行
echo/&echo/Usage:&echo/Call ReadLine ^<文件名^> ^<跳过行数^> ^<读取行数^>
echo/&echo / 例如:call ReadLine aa.txt 5 7 ,将跳过 aa.txt 文件的前 5 行,读取下面的 7 行字符
echo/&echo / 如果 ^<跳过行数^> 没有指定,就从文件第一行读取
echo/&echo / 指定 ^<读取行数^> 时必须指定 ^<跳过行^>
echo/======================================
goto :eof
-----------------------------------------------------------------------------------------
这里只截取了部分楼层的,完整的可以去下面的连接去看看原文。
关注我】。(●'◡'●)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!
本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/p/17984144
【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!