中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-08 17:07
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » 如何提取已找到的字符串的上数第3行
可打印版本  1,312 / 12
第1楼 gmy 发表于 2008-04-11 10:29
版主 发帖 392 积分 1,113
如何提取已找到的字符串的上数第3行
已知 1.txt 的内容如下:

....

Windows 旧 OS 加载器
------------------------
标识符 {ntldr}
device unknown
path \ntldr
description 早期版本的 Windows

实模式启动扇区
---------------------
标识符 {20fbee72-0756-11dd-b6e6-001aa0fd6cbb}
device partition=C:
path \ghldr.mbr
description 一键GHOST v11.0.2 Build 080402

EMS 设置
------------
标识符 {emssettings}
bootems Yes

调试器设置
-----------------
标识符 {dbgsettings}
debugtype Serial
debugport 1
baudrate 115200
...



求:ghldr.mbr 上数第3行,结果输出到2.txt ,本例的2.txt 的内容应该是:
{20fbee72-0756-11dd-b6e6-001aa0fd6cbb}

注意:
1, ghldr.mbr的所在的行数不固定
2, 不许用bcdedit /creat 和 第三方工具
3, 一行解决。( 最好用 for 和 findstr )

[ Last edited by gmy on 2008-4-11 at 10:32 AM ]
第2楼 ansipeter 发表于 2008-04-11 10:49
中级用户 发帖 130 积分 269


没有做什么容错,凑活用吧
第3楼 bat-zw 发表于 2008-04-11 11:32
金牌会员 发帖 1,276 积分 3,105
可以这样判断吧:

或者:


[ Last edited by zw19750516 on 2008-4-11 at 11:56 AM ]
第4楼 terse 发表于 2008-04-11 12:08
银牌会员 发帖 946 积分 2,404
@echo off
for /f "delims=:" %%i in ('findstr /n "ghldr.mbr" b.txt') do set/a n=%%i-3
for /f "skip=%n% tokens=2" %%i in (b.txt) do echo.%%i&&pause&goto :eof
pause
第5楼 gmy 发表于 2008-04-11 15:15
版主 发帖 392 积分 1,113
谢谢各位,但不符合要求,我要求必须用一句,我按2楼的思路做了一句,但出错:



%c%没有赋上值,大家看错在哪里?

[ Last edited by gmy on 2008-4-11 at 03:18 PM ]
第6楼 bat-zw 发表于 2008-04-11 15:56
金牌会员 发帖 1,276 积分 3,105
一个for里不算是一句啊,呵呵。
第7楼 chenall 发表于 2008-04-11 16:12
银牌会员 发帖 469 积分 1,276 来自 福建泉州
Originally posted by gmy at 2008-4-11 03:15 PM:
谢谢各位,但不符合要求,我要求必须用一句,我按2楼的思路做了一句,但出错:
第8楼 26933062 发表于 2008-04-11 17:41
银牌会员 发帖 879 积分 2,268
楼主难道是说只用一个for ?
那样的话,代码会长很多。
第9楼 gmy 发表于 2008-04-14 10:17
版主 发帖 392 积分 1,113
7楼的作为单独运行的BAT成功,但用VB的RUN(开头加入“c:\windows\system32\cmd.exe /c ”)运行失败,估计是CMD缺少什么兼容性的参数,请指教。

[ Last edited by gmy on 2008-4-14 at 04:10 PM ]
第10楼 plp626 发表于 2008-04-14 11:58
银牌会员 发帖 1,020 积分 2,278
练手:
for /f "delims=[]" %%a in ('find /n "string" test.txt')do call:search %%a
pause
:search
set/a n=%1+2
for /f "skip=%n% delims=" %%a in (test.txt) do echo %%a&exit/b
第11楼 plp626 发表于 2008-04-14 12:05
银牌会员 发帖 1,020 积分 2,278
错误很严重,改下:
for /f "skip=2 delims=[]" %%a in ('find /n "string" test.txt')do call:search %%a
pause
:search
set/a n=%1+2
for /f "skip=%n% delims=" %%a in (test.txt) do echo %%a&exit/b
第12楼 nipo 发表于 2008-04-27 02:52
中级用户 发帖 106 积分 228
受益,这个很有用。
第13楼 26933062 发表于 2008-04-27 06:01
银牌会员 发帖 879 积分 2,268
:
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023