中国DOS联盟论坛

中国DOS联盟
-- 联合DOS 推动DOS 发展DOS --

联盟域名:cndos.rths.ml  论坛域名:cndos.rths.ml/forum

DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

» 游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助

 
« « 2021-7 » »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

栏目分类

最热的 5 篇文章

搜索网志文章


在线用户 : 6
0 位会员   6 位游客
[求助]关于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 ]

评论

将批处理放在那些xml所在目录.
CODE:  [Copy to clipboard]
@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)


s11ss 2007-10-30 18:48

处理中...
结束。

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

wjdidi 2007-10-30 19:35

CODE:  [Copy to clipboard]
@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
  )
)


abcd 2007-10-30 20:07



  Quote:
Originally posted by abcd at 2007-10-30 08:07 PM:
CODE:  [Copy to clipboard]
@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
  )
)

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

wjdidi 2007-10-30 20:18

我这里测试通过
CODE:  [Copy to clipboard]
@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 ]

terse 2007-10-30 22:02

还是不行,哎,郁闷了

wjdidi 2007-10-30 22:22



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

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

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

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

s11ss 2007-10-30 22:43



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

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

terse 2007-10-30 23:12

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

junchen2 2007-10-31 00:06

2楼的应该可以啊?
CODE:  [Copy to clipboard]
@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


26933062 2007-10-31 00:25

二楼的代码运行后真没有生成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

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

wjdidi 2007-10-31 00:55

直接
CODE:  [Copy to clipboard]
sed "3!d" *.xml > filename.txt
不行么?

lxmxn 2007-10-31 09:38

CODE:  [Copy to clipboard]
sed -n "3{p;q}" *.xml>>filename.txt


abcd 2007-10-31 09:45

发表评论
标题:   [可选]
选项:
 禁用 URL 识别
 禁用 Smilies
 禁用 Discuz! 代码
 使用个人签名
 接收新回复邮件通知

           
[完成后可按 Ctrl+Enter 发布]

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



[ 联系我们 - 中国DOS联盟 ]


Powered by Discuz! © 2001-2011