中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-13 22:46
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何读取文本文件开头的若干行
楼 主 [已结]如何读取文本文件开头的若干行 发表于 2008-12-04 22:12 ·  中国 广东 江门 联通
新手上路
积分 19
发帖 11
注册 2008-07-10 18:56
UID 121330
性别 男
状态 离线
如何读取文本文件开头的若干行

[ Last edited by HAT on 2008-12-5 at 22:55 ]
2 发表于 2008-12-04 23:46 ·  中国 江西 赣州 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
UID 96653
性别 男
状态 离线
例如要取前 3 行,有以下方法:

1、碰到第 3 行的内容就停止:
@echo off
for /f "delims=" %%a in (a.txt) do (
echo.%%a
if "%%a"=="第 3 行的内容" goto out
)
:out
pause

2、每读取一行内容,变量 n 的值加 1,当 n=3,即已经读取了 3 行,就停止:
@echo off & setlocal EnableDelayedExpansion
for /f "delims=" %%a in (a.txt) do (
echo.%%a
set /a n+=1 & if !n!==3 goto out
)
:out
pause


如果要处理空行:
@echo off
for /f "tokens=1,* delims=:" %%a in ('findstr /n .* a.txt') do (
echo.%%b
if %%a==3 goto out
)
:out
pause


[ Last edited by tireless on 2008-12-5 at 11:20 ]
3 发表于 2008-12-05 09:47 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
差不多两年前,lxmxn 斑竹给出的代码:
http://www.cn-dos.net/forum/viewthread.php?tid=28639
4 发表于 2008-12-05 13:13 ·  中国 福建 泉州 移动
初级用户
★★
积分 134
发帖 54
注册 2008-11-19 11:47
UID 131429
性别 男
状态 离线
请教tireless: 是否在双for中不能用goto提前跳出里边的for?
以下代码只执行一次循环

@echo off
for /r %%i in (*.txt) do (

for /f "tokens=1,* delims=:" %%a in ('findstr /n .* %%~si') do (
echo.%%b
if %%a==3 goto out
)

:out
pause
)


如果是怎改?

[ Last edited by wangff on 2008-12-5 at 13:16 ]
5 RE 4 楼 发表于 2008-12-05 13:41 ·  中国 江西 赣州 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
UID 96653
性别 男
状态 离线
@echo off
for %%i in (*.txt) do CALL :3 "%%i"

PAUSE & EXIT /B

:3
for /f "tokens=1,* delims=:" %%a in ('findstr /n .* %~s1') do (
echo.%%b
if %%a==3 goto :EOF
)
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
wangff +1 2008-12-05 14:06
6 发表于 2008-12-05 14:13 ·  中国 福建 泉州 移动
初级用户
★★
积分 134
发帖 54
注册 2008-11-19 11:47
UID 131429
性别 男
状态 离线
谢谢tireless!
但还有问题:遇到两个大的txt(几兆)后按任意键就不再往下执行!

@echo off
for %%i in (*.txt) do CALL :3 "%%i"
exit/b

:3
echo.%1
for /f "tokens=1,* delims=:" %%a in ('findstr /n .* %~s1') do (
echo.%%b
if %%a==10 (
pause
goto :EOF
)
)


不好意思,是我漏了exit/b

[ Last edited by wangff on 2008-12-5 at 14:20 ]
7 发表于 2008-12-05 22:37 ·  中国 广东 江门 联通
新手上路
积分 19
发帖 11
注册 2008-07-10 18:56
UID 121330
性别 男
状态 离线
谢谢各位!
努力学习中.
论坛跳转: