中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]关于FOR命令批量提取指定行的文本!
作者:
标题: [求助]关于FOR命令批量提取指定行的文本! 上一主题 | 下一主题
wjdidi
初级用户





积分 175
发帖 55
注册 2007-4-30
状态 离线
『楼 主』:  [求助]关于FOR命令批量提取指定行的文本!

几千个文件,文件名都是:  数字.xml (数字从900-50000不等,不是连续的)

要求就是把所有 xml 文件的第三行提取出来,存为filename.txt

filename.txt 文件内容格式为:

1.xml文件第三行
2.xml文件第三行
6.xml文件第三行
。。。。
50000.xml第三行

急,搞了半天搞不出来,贴子看了N多,也没试验出来,救高手帮帮忙!

[ Last edited by wjdidi on 2007-10-30 at 07:53 PM ]

2007-10-30 18:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 2 楼』:  

将批处理放在那些xml所在目录.
@echo off
echo 处理中...
for /l %%a in (900,1,50000) do (if exist %%a.xml call :f %%a)
echo 结束。
pause>nul
goto :eof
:f
for /f "skip=2 delims=" %%a in (%1.xml) do (echo.%%a>>filename.txt && goto :eof)


2007-10-30 18:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wjdidi
初级用户





积分 175
发帖 55
注册 2007-4-30
状态 离线
『第 3 楼』:  

处理中...
结束。

不行啊,没有产生filename.txt啊

2007-10-30 19:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 4 楼』:  


@echo off
for %%a in (*.xml) do (
  for /f "tokens=1* delims=:" %%i in ('findstr /n .* %%a') do (
     if %%i==3 echo %%j>>filename.txt&&goto :eof
  )
)


2007-10-30 20:07
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
wjdidi
初级用户





积分 175
发帖 55
注册 2007-4-30
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by abcd at 2007-10-30 08:07 PM:
@echo off
for %%a in (*.xml) do (
  for /f "tokens=1* delims=:" %%i in ('findstr /n .* %%a') do (
     if %%i==3 echo %%j>>filename.txt&&goto :eof
  )
)

还是不行,只能提取第一个文件的第三行,其它的文件都提取不了

2007-10-30 20:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





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

我这里测试通过
@echo off
for %%i in (*.xml) do (
set i=%%i
call :doc
)
start filename.txt
goto :eof
:doc
for /f "delims=" %%a in ('more/e +2 ^< "%i%"') do (
  if not defined line set "line=%%a"
)
echo,%line%>>filename.txt
set line=
[ Last edited by terse on 2007-10-31 at 12:52 AM ]

2007-10-30 22:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wjdidi
初级用户





积分 175
发帖 55
注册 2007-4-30
状态 离线
『第 7 楼』:  

还是不行,哎,郁闷了

2007-10-30 22:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by wjdidi at 2007-10-30 07:35 PM:
处理中...
结束。

不行啊,没有产生filename.txt啊

文件是生成到你的当前执行目录了.

这样吧,你双击运行批处理,然后会发现在批处理所在目录生成了filename.txt.

2007-10-30 22:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





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



  Quote:
Originally posted by wjdidi at 2007-10-30 22:22:
还是不行,哎,郁闷了

我这里测试好的  会是什么问题呢?

2007-10-30 23:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 10 楼』:  

for /f "delims=" %%a in ('dir /b /s /a-d *.xml') do sed -n "3p" %%~sa|sed "/^$/d"|more>>filename.txt
pause

2007-10-31 00:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





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

2楼的应该可以啊?
@echo off
for %%a in (*.xml) do call :lis "%%a"
start filename.txt
exit
:lis
for /f "skip=2 delims=" %%i in (%~1) do echo %%i>>filename.txt&&goto :eof




致精致简!
2007-10-31 00:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wjdidi
初级用户





积分 175
发帖 55
注册 2007-4-30
状态 离线
『第 12 楼』:  

二楼的代码运行后真没有生成filename.txt

  Quote:
Originally posted by junchen2 at 2007-10-31 12:06 AM:
for /f "delims=" %%a in ('dir /b /s /a-d *.xml') do sed -n "3p" %%~sa|sed "/^$/d"|more>>filename.txt
pause

这段代码可以,问题已解决,谢谢各位高手!!!

2007-10-31 00:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




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

直接
sed "3!d" *.xml > filename.txt
不行么?

2007-10-31 09:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 14 楼』:  


sed -n "3{p;q}" *.xml>>filename.txt


2007-10-31 09:45
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复

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


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



论坛跳转: