|
kcdsw
中级用户
积分 404
发帖 179
注册 2006-3-30
状态 离线
|
『楼 主』:
『求助』提取指定行的内容 其他一概略过
呵呵 苦找了一下午 没找到合适的 还希望大家帮我
|
|
2006-4-25 19:37 |
|
|
zhangxue
初级用户
积分 183
发帖 82
注册 2006-3-28
状态 离线
|
|
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
状态 离线
|
|
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: = %
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 |
|
|
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: = %
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 |
|