![]() |
中国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: |
|
| 第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 |