标题: [求助]关于FOR命令批量提取指定行的文本!
[打印本页]
作者: wjdidi
时间: 2007-10-30 18:14
标题: [求助]关于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 ]
作者: s11ss
时间: 2007-10-30 18:48
将批处理放在那些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)
作者: wjdidi
时间: 2007-10-30 19:35
处理中...
结束。
不行啊,没有产生filename.txt啊
作者: abcd
时间: 2007-10-30 20:07
@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
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
)
) |
|
还是不行,只能提取第一个文件的第三行,其它的文件都提取不了
作者: terse
时间: 2007-10-30 22:02
我这里测试通过
@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 ]
作者: wjdidi
时间: 2007-10-30 22:22
还是不行,哎,郁闷了
作者: s11ss
时间: 2007-10-30 22:43
Quote: |
Originally posted by wjdidi at 2007-10-30 07:35 PM:
处理中...
结束。
不行啊,没有产生filename.txt啊 |
|
文件是生成到你的当前执行目录了.
这样吧,你双击运行批处理,然后会发现在批处理所在目录生成了filename.txt.
作者: terse
时间: 2007-10-30 23:12
Quote: |
Originally posted by wjdidi at 2007-10-30 22:22:
还是不行,哎,郁闷了 |
|
我这里测试好的 会是什么问题呢?
作者: junchen2
时间: 2007-10-31 00:06
for /f "delims=" %%a in ('dir /b /s /a-d *.xml') do sed -n "3p" %%~sa|sed "/^$/d"|more>>filename.txt
pause
作者: 26933062
时间: 2007-10-31 00:25
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
作者: wjdidi
时间: 2007-10-31 00:55
二楼的代码运行后真没有生成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 |
|
这段代码可以,问题已解决,谢谢各位高手!!!
作者: lxmxn
时间: 2007-10-31 09:38
直接
sed "3!d" *.xml > filename.txt
不行么?
作者: abcd
时间: 2007-10-31 09:45
sed -n "3{p;q}" *.xml>>filename.txt