中国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 楼』:  

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 楼』:  

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 楼』:  

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 楼』:  

Originally posted by terse at 2008-5-31 17:00: 楼兄笔误哦 %%i应该%%a 延迟也可以去了吧
粗心,谢提醒,以改正。




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





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

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
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

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


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



论坛跳转: