中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 『求助』提取指定行的内容 其他一概略过
作者:
标题: 『求助』提取指定行的内容 其他一概略过 上一主题 | 下一主题
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『楼 主』:  『求助』提取指定行的内容 其他一概略过

呵呵  苦找了一下午 没找到合适的  还希望大家帮我

2006-4-25 19:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zhangxue
初级用户





积分 183
发帖 82
注册 2006-3-28
状态 离线
『第 2 楼』:  

lmod好像可以。

2006-4-25 19:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 3 楼』:  

呵呵 不太想借助其他软件来实现
就想用批处理~~  呵呵

2006-4-25 20:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 4 楼』:  

仔细翻一翻,前面发过的。
方法一 :
for /f "skip=3 delims=" %i in (a.txt) do echo %i
可以显示出第四行开始的内容,如果只想显示第四行的内容可以在后面接 &call或 &exit。
方法二:
for /f "delims=: tokens=1,2" %i in ('findstr /n . a.txt') do if "%i"="4" set %i=%j
echo 第四行的内容为:%4%
具体情况,具体分析。

2006-4-25 21:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 5 楼』:  

谢谢你的解答
呵呵  这些我都翻过了 自己也写了个
只不过效率不太高  (自己感觉)
因为每个需要分析的文件都是50多M,又想偷懒~~
我的想法就是它能不能直接读第二行  节约时间嘛

突然又有了新的想法  看了你的回复 我在想 我们用for来寻找某个字符串 而for是需要遍历的 但是我的字符串只需要1次就ok了  可以不可以用其他的命令或者 找到后就跳出for语句? 暂时思维有些混乱~~~ 请指点

[ Last edited by kcdsw on 2006-4-25 at 22:33 ]

2006-4-25 22:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 6 楼』:  

findstr /?多看几遍,希望你能自己得到方法。
之所以给出第一种方案就是因为第一种可以跳过前三行然后结束,光看别人的是不会有多少提高的,自己多想想吧。
两种方法只要略做修改都可以提高效率。
对了,留心findstr的 {“常规表达式” 部分} + {参数 “/n” 部分},理解了这两部分可以轻松地指哪儿打哪儿。

2006-4-25 22:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zhangxue
初级用户





积分 183
发帖 82
注册 2006-3-28
状态 离线
『第 7 楼』:  

Dos不支持for /f吧?

2006-4-25 22:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 8 楼』:  

犯昏了
@echo off
echo 测试环境CMD@WinXP sp2,如果使用在其他系统请先测试!
echo 执行时需要进行字符串查找,请不要对相关文件进行改动
echo.
echo 执行中...请耐心等待

echo ----------------------------执行信息----------------------------
For /f %%a in ('dir /b *.ps') do call :name "%%a"
echo ----------------------------------------------------------------
echo 执行完毕,按任意键退出
pause >nul
exit

:name
set name=%~n1
if not [%name:~0,1%]==[2] goto :eof
for /f "tokens=2 delims=. " %%i in ('findstr pdn.pdf$ %name%.ps') do set file=%%i.xml
set xmlpath="%appdata%\NewspaperDirect\PressReader\queue\%file%"
for /F "tokens=*" %%c in ('type %xmlpath% ^|find "<title>"') do set paper="%%c"
set paper=%paper:~8,-9%
set paper=%paper:&#x20;= %
set name=%paper% %name:~0,4%-%name:~4,2%-%name:~6,2%
rename %1 "%name%.ps" &&echo %~n1.ps 改名为 %name%.ps
goto :eof
ok了  睡觉去~~  下下侬~~

[ Last edited by kcdsw on 2006-4-26 at 14:02 ]

2006-4-25 22:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 9 楼』:  

剩下的明天再改吧   第二次要从xml里边查询  因为文件小 所以不觉得影响速度

最开始用type 重定向 用find查找
后来测试findstr的时候发现它的规律后速度大为提高  1秒就能执行完 以前得分钟计算
好了  以后工作会更省力了

[ Last edited by kcdsw on 2006-4-26 at 00:14 ]

附件 1: 新建 BMP 图像 (2).JPG (2006-4-26 00:14, 91.51 K, 下载附件所需积分 1 点 ,下载次数: 2)


2006-4-26 00:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
无奈何
荣誉版主





积分 1338
发帖 356
注册 2005-7-15
状态 离线
『第 10 楼』:  

追求效率的话可以试试 sed

sed -n "2{p;q}" file.txt

可显示文件第二行
sed下载:http://www.student.northpark.edu/pemente/sed/gsed407x.zip



  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

2006-4-26 00:16
查看资料  发送邮件  发短消息 网志  OICQ (105400208)  编辑帖子  回复  引用回复
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 11 楼』:  

发现bug

更正
@echo off
echo 测试环境CMD@WinXP sp2,如果使用在其他系统请先测试!
echo 执行时需要进行字符串查找,请不要对相关文件进行改动
echo.
echo 执行中...请耐心等待

echo ----------------------------执行信息----------------------------
For /f %%a in ('dir /b 20*.ps') do call :name "%%a"
echo ----------------------------------------------------------------
echo 执行完毕,按任意键退出
pause >nul
exit

:name
set name=%~n1
if not [%name:~0,1%]==[2] goto :eof
for /f "tokens=2 delims=. " %%i in ('findstr pdn.pdf$ %name%.ps') do set file=%%i.xml
set xmlpath="%appdata%\NewspaperDirect\PressReader\queue\%file%"
for /F "tokens=*" %%c in ('type %xmlpath% ^|find "<title>"') do set paper="%%c"
set paper=%paper:&#x20;= %
set paper=%paper:~8,-9%
set name=%paper% %name:~0,4%-%name:~4,2%-%name:~6,2%
rename %1 "%name%.ps" &&echo %~n1.ps 改名为 %name%.ps
goto :eof
思路是用findstr中的$来界定最后需要查找的行
因为我需要的字符只在第二行出现所以效率还算可以
但是同样的命令在对xml文件查找的时候就出错了
最后还是用的type重定向 好在xml没有超过20kb的 所以也就这样了

对程序做了简单的优化  暂时这样吧  谢谢楼上的无奈何 兄和 楼上上的兄弟们~~

[ Last edited by kcdsw on 2006-4-26 at 15:46 ]

2006-4-26 15:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: