标题: [文本处理] [分享]实现对文件指定行的读取的批处理小函数(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:- @echo off
- setlocal enabledelayedexpansion
- set x=3
- set y=5
- set /a z=x+y
- (for /l %%a in (1,1,%z%) do (
- set /p str=
- echo,!str!
- ))<a.txt>a.log
- (for /f "skip=%x% delims=" %%i in (a.log) do echo,%%i)>new_a.txt
- del a.log
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |