中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-19 02:55
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何读取文件中的某几行到另外一个文件 查看 833 回复 14
楼 主 如何读取文件中的某几行到另外一个文件 发表于 2008-05-27 11:02 ·  中国 上海 电信
初级用户
★★
积分 160
发帖 81
注册 2006-07-27 17:52
UID 59377
性别 男
状态 离线
读取文件test1.txt 中的第1,3,4,6,7行到test2.txt
test1 内容
port a 1
port b 2
port c 3
port d 4
port e 5
port f 6
port g 7
port h 8
port i 9
2 发表于 2008-05-27 11:10 ·  中国 江苏 苏州 吴江区 电信
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
UID 99089
性别 男
状态 离线

@echo off
for /f "delims=" %%i in ('findstr "1 3 4 6 7" a.txt') do (set num=%%i
>>test2.txt call,echo %%num%%
)
pause
3 发表于 2008-05-27 11:15 ·  中国 上海 电信
初级用户
★★
积分 160
发帖 81
注册 2006-07-27 17:52
UID 59377
性别 男
状态 离线
谢谢huahua0919的帮助 如果我test1中的文件内容是这样



SET Port1=0
SET Port2=1
SET Port2=low



SET Port1=0
SET Port2=0


SET Port1=0
SET Port2=0


SET Port1=0
SET Port2=0
SET Port3=0
SET Port4=0
SET Port5=1
SET Port5=full

SET Port6=1
SET Port6=full



SET Port1=0
SET Port2=0


SET Port1=0
SET Port2=0


SET Port1=1
SET Port1=full

SET Port2=0


SET Port1=1
SET Port1=full

SET Port2=0
SET Port3=0
SET Port4=0
SET Port5=0
SET Port6=0
呢?
4 发表于 2008-05-27 11:15 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
@echo off
setlocal enabledelayedexpansion
set row=0
type nul>"C:\test\test2.txt"
for /f "tokens=1,2* delims=:" %%a in ('findstr /n .* "C:\test\test1.txt"') do (
set /a row+=1
if !row! equ 1 (>>"C:\test\test2.txt" echo %%b)
if !row! equ 3 (>>"C:\test\test2.txt" echo %%b)
if !row! equ 4 (>>"C:\test\test2.txt" echo %%b)
if !row! equ 6 (>>"C:\test\test2.txt" echo %%b)
if !row! equ 7 (>>"C:\test\test2.txt" echo %%b)
)
5 发表于 2008-05-27 11:18 ·  中国 江苏 苏州 吴江区 电信
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
UID 99089
性别 男
状态 离线
那就试试HAT兄的代码
6 发表于 2008-05-27 11:23 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
UID 112398
性别 男
状态 离线
Originally posted by HAT at 2008-5-27 11:15:
@echo off
setlocal enabledelayedexpansion
set row=0
type nul>"C:\test\test2.txt"
for /f "tokens=1,2* delims=:" %%a in ('findstr /n .* "C:\test\test1.txt"' ...

可简化:

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (test1.txt) do (
set str=%%i
if defined str (
set /a n+=1
set _!n!=!str!
)
)
for %%i in (1 3 4 6 7) do echo !_%%i!>>test2.txt
pause>nul


[ Last edited by zw19750516 on 2008-5-27 at 11:37 AM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
WANKOILZ +1 2008-05-31 11:24
批处理之家新域名:www.bathome.net
7 发表于 2008-05-27 11:29 ·  中国 上海 电信
初级用户
★★
积分 160
发帖 81
注册 2006-07-27 17:52
UID 59377
性别 男
状态 离线
谢谢两位高手的回复
8 发表于 2008-05-31 10:47 ·  中国 上海 电信
初级用户
★★
积分 160
发帖 81
注册 2006-07-27 17:52
UID 59377
性别 男
状态 离线
HAT兄
如果是空行为什么显示的是echo is off 而不是空行
9 发表于 2008-05-31 10:50 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
Originally posted by jia332 at 2008-5-31 10:47 AM:
HAT兄
如果是空行为什么显示的是echo is off 而不是空行

在计算1,3,4,6,7行的时候,空行是否需要计算在内?
10 发表于 2008-05-31 11:17 ·  中国 上海 电信
初级用户
★★
积分 160
发帖 81
注册 2006-07-27 17:52
UID 59377
性别 男
状态 离线
要计算在内
11 发表于 2008-05-31 12:47 ·  中国 重庆 合川区 电信
初级用户
★★
积分 198
发帖 89
注册 2007-09-06 23:22
UID 96746
性别 男
来自 重庆
状态 离线
借用zw兄的代码,要计算空行:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in ('findstr/n ".*" test1.txt') do (
set str=%%i&set str=!str:*:=!
set/a n+=1
set _!n!=!str!
)
for %%i in (1 3 4 6 7) do echo.!_%%i!>>test2.txt
pause
12 发表于 2008-05-31 14:29 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线

@echo off
for %%a in (1 3 4 6 7) do set .%%a=a
for /f "tokens=1* delims=:" %%a in ('findstr/n ".*" test1.txt') do (
if defined .%%a echo.%%b
)
pause


[ Last edited by 26933062 on 2008-5-31 at 05:11 PM ]
致精致简!
13 发表于 2008-05-31 17:00 ·  中国 江苏 常州 武进区 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
UID 42345
状态 离线
Originally posted by 26933062 at 2008-5-31 14:29:

@echo off&setlocal enabledelayedexpansion
for %%a in (1 3 4 6 7) do set .%%a=a
for /f "tokens=1* delims=:" %%i in ('findstr/n ".*" test1.txt') do (
if defined . ...

楼兄笔误哦 %%i应该%%a
延迟也可以去了吧
简单!简单!再简单!
14 发表于 2008-05-31 17:12 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
UID 73968
性别 男
状态 离线
Originally posted by terse at 2008-5-31 17:00:

楼兄笔误哦 %%i应该%%a
延迟也可以去了吧

粗心,谢提醒,以改正。
致精致简!
15 发表于 2008-05-31 18:35 ·  中国 上海 电信
初级用户
★★
积分 160
发帖 81
注册 2006-07-27 17:52
UID 59377
性别 男
状态 离线
Originally posted by 26933062 at 2008-5-31 14:29:

@echo off
for %%a in (1 3 4 6 7) do set .%%a=a
for /f "tokens=1* delims=:" %%a in ('findstr/n ".*" test1.txt') do (
if defined .%%a echo.%%b
)
pause




echo. 这个。就可以解决了,兄弟我又学了一招。 十分感谢大家帮助
论坛跳转: