中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 20:55
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 『求助』提取指定行的内容 其他一概略过
楼 主 『求助』提取指定行的内容 其他一概略过 发表于 2006-04-25 19:37 ·  中国 北京 鹏博士BGP
中级用户
★★
积分 404
发帖 179
注册 2006-03-30 14:44
UID 53056
状态 离线
呵呵 苦找了一下午 没找到合适的 还希望大家帮我
2 发表于 2006-04-25 19:53 ·  中国 广东 清远 联通
初级用户
★★
积分 183
发帖 82
注册 2006-03-28 21:18
UID 52959
状态 离线
lmod好像可以。
3 发表于 2006-04-25 20:51 ·  中国 北京 鹏博士BGP
中级用户
★★
积分 404
发帖 179
注册 2006-03-30 14:44
UID 53056
状态 离线
呵呵 不太想借助其他软件来实现
就想用批处理~~ 呵呵
4 发表于 2006-04-25 21:04 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
UID 50550
状态 离线
仔细翻一翻,前面发过的。
方法一 :

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%

具体情况,具体分析。
5 发表于 2006-04-25 22:28 ·  中国 北京 鹏博士BGP
中级用户
★★
积分 404
发帖 179
注册 2006-03-30 14:44
UID 53056
状态 离线
谢谢你的解答
呵呵 这些我都翻过了 自己也写了个
只不过效率不太高 (自己感觉)
因为每个需要分析的文件都是50多M,又想偷懒~~
我的想法就是它能不能直接读第二行 节约时间嘛

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

[ Last edited by kcdsw on 2006-4-25 at 22:33 ]
6 发表于 2006-04-25 22:42 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
UID 50550
状态 离线
findstr /?多看几遍,希望你能自己得到方法。
之所以给出第一种方案就是因为第一种可以跳过前三行然后结束,光看别人的是不会有多少提高的,自己多想想吧。
两种方法只要略做修改都可以提高效率。
对了,留心findstr的 {“常规表达式” 部分} + {参数 “/n” 部分},理解了这两部分可以轻松地指哪儿打哪儿。
7 发表于 2006-04-25 22:48 ·  中国 广东 清远 联通
初级用户
★★
积分 183
发帖 82
注册 2006-03-28 21:18
UID 52959
状态 离线
Dos不支持for /f吧?
8 发表于 2006-04-25 22:48 ·  中国 北京 鹏博士BGP
中级用户
★★
积分 404
发帖 179
注册 2006-03-30 14:44
UID 53056
状态 离线
犯昏了

@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 == 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 ]
9 发表于 2006-04-26 00:12 ·  中国 北京 鹏博士BGP
中级用户
★★
积分 404
发帖 179
注册 2006-03-30 14:44
UID 53056
状态 离线
剩下的明天再改吧 第二次要从xml里边查询 因为文件小 所以不觉得影响速度

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

[ Last edited by kcdsw on 2006-4-26 at 00:14 ]
附件
新建 BMP 图像 (2).JPG
10 发表于 2006-04-26 00:16 ·  中国 辽宁 锦州 中移铁通
荣誉版主
★★★
积分 1,338
发帖 356
注册 2005-07-15 12:09
UID 40733
性别 男
状态 离线
追求效率的话可以试试 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

11 发表于 2006-04-26 15:41 ·  中国 北京 鹏博士BGP
中级用户
★★
积分 404
发帖 179
注册 2006-03-30 14:44
UID 53056
状态 离线
发现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 == 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 ]
论坛跳转: