中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何读取文件中的某几行到另外一个文件
作者:
标题: 如何读取文件中的某几行到另外一个文件 上一主题 | 下一主题
jia332
初级用户





积分 160
发帖 81
注册 2006-7-27
状态 离线
『楼 主』:  如何读取文件中的某几行到另外一个文件

读取文件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

2008-5-27 11:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 2 楼』:  


@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


2008-5-27 11:10
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
jia332
初级用户





积分 160
发帖 81
注册 2006-7-27
状态 离线
『第 3 楼』:  

谢谢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
呢?

2008-5-27 11:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 4 楼』:  


@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)
)




2008-5-27 11:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 5 楼』:  

那就试试HAT兄的代码

2008-5-27 11:18
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 6 楼』:  



  Quote:
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-5-31 11:24




批处理之家新域名:www.bathome.net
2008-5-27 11:23
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
jia332
初级用户





积分 160
发帖 81
注册 2006-7-27
状态 离线
『第 7 楼』:  

谢谢两位高手的回复

2008-5-27 11:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jia332
初级用户





积分 160
发帖 81
注册 2006-7-27
状态 离线
『第 8 楼』:  

HAT兄
如果是空行为什么显示的是echo is off 而不是空行

2008-5-31 10:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by jia332 at 2008-5-31 10:47 AM:
HAT兄
如果是空行为什么显示的是echo is off 而不是空行

在计算1,3,4,6,7行的时候,空行是否需要计算在内?



2008-5-31 10:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
jia332
初级用户





积分 160
发帖 81
注册 2006-7-27
状态 离线
『第 10 楼』:  

要计算在内

2008-5-31 11:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
WANKOILZ
初级用户





积分 198
发帖 89
注册 2007-9-6
来自 重庆
状态 离线
『第 11 楼』:  

借用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


2008-5-31 12:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 12 楼』:  


@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 ]



致精致简!
2008-5-31 14:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 13 楼』:  



  Quote:
Originally posted by 26933062 at 2008-5-31 14:29:
[code]
@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
延迟也可以去了吧



简单!简单!再简单!
2008-5-31 17:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 14 楼』:  



  Quote:
Originally posted by terse at 2008-5-31 17:00:

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

粗心,谢提醒,以改正。



致精致简!
2008-5-31 17:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
jia332
初级用户





积分 160
发帖 81
注册 2006-7-27
状态 离线
『第 15 楼』:  



  Quote:
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
[[i ...

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

2008-5-31 18:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: