中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » "小函数"读取文件指定的特定行(ReadLine2.bat)
作者:
标题: "小函数"读取文件指定的特定行(ReadLine2.bat) 上一主题 | 下一主题
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『楼 主』:  "小函数"读取文件指定的特定行(ReadLine2.bat)


  在ReadLine.bat的基础上修改了一下,读取文件指定的特定行。

  使用方法也比较简单,在批处理中加上 "Call ReadLine2.bat <文件名> <读取行号>" 就可以了,例如:"Call ReadLine2 system.ini 11 5 7 9",可以读取system.ini文件的第5、7、9和11行,后面的行号不分先后大小顺序。但是效率不是很高,读取小文件还是可以的。

ReadLine2.bat
@echo off&SetLocal ENABLEDELAYEDEXPANSION
:::::::::::ReadLine2.Bat::::::::::::::::::

if "%1"=="" (goto --help) else (set file=%1)
if not exist %file% goto :eof
if "%2"=="" (
        for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%file%"') do echo/%%b
        goto :eof
) else (
        set args=%*
        for %%a in (!args!) do (
                if not "%%a"=="%1" (for /f "tokens=1* delims=:" %%b in ('findstr /n .* "%file%"') do (
                        if "%%b"=="%%a" echo/%%c)
                )
        )
)
goto :eof

:--help
echo/======================================
echo/本程序段需要带参数才能正常运行
echo/&echo/Usage:&echo/Call ReadLine2 ^<文件名^> ^<读取行号^>
echo/&echo/例如:Call ReadLine2 aa.txt 5 7 11 ,将读取aa.txt文件的第5,7,11行
echo/&echo/如果^<读取行号^>没有指定,将读取整个文件的内容
echo/======================================
goto :eof


   此帖被 +8 点积分      点击查看详情   
评分人:【 baomaboy 分数: +4  时间:2007-3-20 03:51
评分人:【 29984365 分数: +1  时间:2007-4-7 04:41
评分人:【 HUNRYBECKY 分数: +3  时间:2008-7-30 08:45


2007-3-20 03:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
baomaboy
银牌会员





积分 1513
发帖 554
注册 2005-12-30
状态 离线
『第 2 楼』:  

收藏了。

2007-3-20 03:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 3 楼』:  

lxmxn斑竹怎么一贴发两个地方呀,为了管理方便,建议移到原来的ReadLine1.bat下.谢谢

2007-3-20 21:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by HUNRYBECKY at 2007-3-20 08:33:
lxmxn斑竹怎么一贴发两个地方呀,为了管理方便,建议移到原来的ReadLine1.bat下.谢谢


  这个不叫“一贴发两个地方”吧?

  虽然都是用来读取文件指定行的,但是具体作用是不一样的。一个是读取连续行的,一个是读取特定行的,效果也不一样。


2007-3-20 23:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
29984365
初级用户





积分 39
发帖 15
注册 2007-4-4
状态 离线
『第 5 楼』:  

收下了! 谢谢

2007-4-7 04:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
z060053
新手上路





积分 4
发帖 2
注册 2008-7-25
状态 离线
『第 6 楼』:  

@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 :eo

2008-7-25 14:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: