楼 主
[求助]关于FOR命令批量提取指定行的文本!
发表于 2007-10-30 18:14 · 中国 安徽 阜阳 联通
初级用户
★★
积分 175 发帖 55 注册 2007-04-30 07:15 UID 87008 性别 男
状态 离线
几千个文件,文件名都是: 数字.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 ]
第 2 楼
发表于 2007-10-30 18:48 · 中国 北京 鹏博士BGP
银牌会员
★★★
积分 2,098 发帖 566 注册 2007-09-11 07:27 UID 97070 性别 男
状态 离线
将批处理放在那些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)
第 3 楼
发表于 2007-10-30 19:35 · 中国 安徽 阜阳 联通
初级用户
★★
积分 175 发帖 55 注册 2007-04-30 07:15 UID 87008 性别 男
状态 离线
处理中...
结束。
不行啊,没有产生filename.txt啊
第 4 楼
发表于 2007-10-30 20:07 · 中国 浙江 衢州 中移铁通
银牌会员
★★★
积分 1,436 发帖 739 注册 2007-10-11 17:44 UID 99469 性别 男
状态 离线
@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
)
)
第 5 楼
发表于 2007-10-30 20:18 · 中国 安徽 阜阳 联通
初级用户
★★
积分 175 发帖 55 注册 2007-04-30 07:15 UID 87008 性别 男
状态 离线
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
)
)
还是不行,只能提取第一个文件的第三行,其它的文件都提取不了
第 6 楼
发表于 2007-10-30 22:02 · 中国 江苏 常州 武进区 电信
银牌会员
★★★
积分 2,404 发帖 946 注册 2005-09-08 13:44 UID 42345
状态 离线
我这里测试通过
@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 ]
第 7 楼
发表于 2007-10-30 22:22 · 中国 安徽 阜阳 联通
初级用户
★★
积分 175 发帖 55 注册 2007-04-30 07:15 UID 87008 性别 男
状态 离线
第 8 楼
发表于 2007-10-30 22:43 · 中国 北京 鹏博士BGP
银牌会员
★★★
积分 2,098 发帖 566 注册 2007-09-11 07:27 UID 97070 性别 男
状态 离线
Originally posted by wjdidi at 2007-10-30 07:35 PM:
处理中...
结束。
不行啊,没有产生filename.txt啊
文件是生成到你的当前执行目录了.
这样吧,你双击运行批处理,然后会发现在批处理所在目录生成了filename.txt.
第 9 楼
发表于 2007-10-30 23:12 · 中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404 发帖 946 注册 2005-09-08 13:44 UID 42345
状态 离线
Originally posted by wjdidi at 2007-10-30 22:22:
还是不行,哎,郁闷了
我这里测试好的 会是什么问题呢?
第 10 楼
发表于 2007-10-31 00:06 · 中国 浙江 杭州 电信
高级用户
★★
积分 537 发帖 219 注册 2007-08-04 09:43 UID 94620 性别 男 来自 杭州--半山
状态 离线
for /f "delims=" %%a in ('dir /b /s /a-d *.xml') do sed -n "3p" %%~sa|sed "/^$/d"|more>>filename.txt
pause
第 11 楼
发表于 2007-10-31 00:25 · 中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268 发帖 879 注册 2006-12-19 16:23 UID 73968 性别 男
状态 离线
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
致精致简!
第 12 楼
发表于 2007-10-31 00:55 · 中国 安徽 阜阳 联通
初级用户
★★
积分 175 发帖 55 注册 2007-04-30 07:15 UID 87008 性别 男
状态 离线
二楼的代码运行后真没有生成filename.txt
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
这段代码可以,问题已解决,谢谢各位高手!!!
第 13 楼
发表于 2007-10-31 09:38 · 中国 湖北 武汉 电信
版主
★★★★★
积分 11,386 发帖 4,938 注册 2006-07-23 17:10 UID 59080
状态 离线
直接
sed "3!d" *.xml > filename.txt不行么?
第 14 楼
发表于 2007-10-31 09:45 · 中国 浙江 衢州 中移铁通
银牌会员
★★★
积分 1,436 发帖 739 注册 2007-10-11 17:44 UID 99469 性别 男
状态 离线
sed -n "3{p;q}" *.xml>>filename.txt
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正