Board logo

标题: [文本处理] [分享]实现对文件指定行的读取的批处理小函数(ReadLine.bat)“改进版” [打印本页]

作者: hfxiang    时间: 2022-7-4 16:32     标题: [分享]实现对文件指定行的读取的批处理小函数(ReadLine.bat)“改进版”

( 原帖见 http://www.cn-dos.net/forum/viewthread.php?tid=28639 )
( 转帖见 http://bbs.bathome.net/thread-4450-1-1.html
声明:版权属于原作者,本人只作自以为是的擅自改动,但目前自用满足所有情况,还请各位大神多指教。

ReadLine.bat

@echo off
@rem 调用方式:Call :ReadLine <文件名> <跳过行数> <读取行数>
:ReadLine <txtFileName> <skipline> <readline>
:: %1        txtFileName        待读入文件
:: %2        skipline        跳过行数,空或非有效数字则默认为0
:: %3        readline        读取行数,空或非有效数字则默认为0,0则表示为剩余的全部
setlocal EnableDelayedExpansion
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
作者: qixiaobin0715    时间: 2022-7-7 10:31

提供另一个思路,未编辑为小函数。假设跳过3行,读取5行,源文件为a.txt,修改后的文件为new_a.txt,处理过程使用了临时文件a.log,执行结束后del:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set x=3
  4. set y=5
  5. set /a z=x+y
  6. (for /l %%a in (1,1,%z%) do (
  7.     set /p str=
  8.     echo,!str!
  9. ))<a.txt>a.log
  10. (for /f "skip=%x% delims=" %%i in (a.log) do echo,%%i)>new_a.txt
  11. del a.log
  12. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2