楼 主
怎么用批处理将特定字符行的下一行输出?
发表于 2010-08-10 20:33 · IANA 局域网IP(Private-Use)
新手上路
★
积分 7 发帖 7 注册 2010-08-05 13:26 UID 171798 性别 男
状态 离线
文件中某些行为特定字符,比如“下一行为输出结果”,我想将文件中这一行的下一行(也就是输出的结果)输出,这样的文件有很多个,怎么用批处理编程?
请教各位大侠,谢谢!
第 2 楼
发表于 2010-08-11 12:45 · IANA 局域网IP(Private-Use)
新手上路
★
积分 7 发帖 7 注册 2010-08-05 13:26 UID 171798 性别 男
状态 离线
第 3 楼
发表于 2010-08-11 17:39 · 中国 湖北 黄石 电信
中级用户
★★
积分 330 发帖 244 注册 2006-04-14 14:07 UID 53823 性别 男 来自 湖北
状态 离线
试试下面的代码:
@echo off&setlocal ENABLEDELAYEDEXPANSION
for %%i in (*.txt) do (
title.处理文件:%%i
for /f "usebackq delims=" %%a in ("%%~i") do (
@echo off
if "!pnext!" equ "true" echo.%%a
echo %%a|find "下一行为输出结果">nul&&set PNext=true||set pNext=false
)
)
pause
第 4 楼
发表于 2010-08-11 19:17 · IANA 局域网IP(Private-Use)
新手上路
★
积分 7 发帖 7 注册 2010-08-05 13:26 UID 171798 性别 男
状态 离线
确实强悍,太厉害了。正是我想要的。
还有个小小的要求:我想把这些结果输出到文件中,怎么办?
另外,有时候不是下一行,可能是下两行,就是说下面的第几行能是个用户可以输入的变量通用性就好了。
大侠确实太厉害了,十分感谢。
第 5 楼
发表于 2010-08-11 19:19 · IANA 局域网IP(Private-Use)
新手上路
★
积分 7 发帖 7 注册 2010-08-05 13:26 UID 171798 性别 男
状态 离线
我改了几下,没能达到我想要的目的。就是简单的输出结果到文件都没改出来。
echo %%a|find "下一行为输出结果">nul&&set PNext=true||set pNext=false
主要是这行代码不明白。
第 6 楼
发表于 2010-08-11 19:25 · IANA 局域网IP(Private-Use)
新手上路
★
积分 7 发帖 7 注册 2010-08-05 13:26 UID 171798 性别 男
状态 离线
实在有点菜,怎么把结果输出到文件我知道了。
但是第二个问题,就是不一定是下面一行,比如下面第三行或者第五行这个不知道怎么写?
还请大侠帮忙!
第 7 楼
发表于 2010-08-11 20:02 · 中国 湖北 黄石 电信
中级用户
★★
积分 330 发帖 244 注册 2006-04-14 14:07 UID 53823 性别 男 来自 湖北
状态 离线
稍作修改下就可以了,要输入到文件可以在命令行下重定向
@echo off&setlocal ENABLEDELAYEDEXPANSION&set "flag=%~1"
echo "%~1"|findstr "">nul||(echo 请输入数字参数!&exit/b)
for %%i in (*.txt) do (
set/a pNext=0
title.处理文件:%%i
for /f "usebackq delims=" %%a in ("%%~i") do (
@echo off&if !pnext! GTR 0 echo.%%a
echo %%a|find "下一行为输出结果">nul&&set/a PNext=!flag!||set /a pNext-=1
)
)
pause
第 8 楼
发表于 2010-08-11 20:36 · 中国 湖北 黄石 电信
中级用户
★★
积分 330 发帖 244 注册 2006-04-14 14:07 UID 53823 性别 男 来自 湖北
状态 离线
Originally posted by cjtielu at 2010-8-11 19:19:
我改了几下,没能达到我想要的目的。就是简单的输出结果到文件都没改出来。
echo %%a|find "下一行为输出结果">nul&&set PNext=true||set pNext=false
主要是这行代码不明白。
| 为管道符,反前面命令的输出交给后面的命令处理
&& 为逻辑与,前面的合令成功就执行成功就执行后面的命令
|| 为罗辑或,与&&相反
如何判断一个命令执行成功与失败,就是程序的返回值(比如:C语言程序就是main函数的return语句带回的值),可用echo.%errorlevel%查看,0为成功,其它为失败。
以上为我所知道的
第 9 楼
发表于 2010-08-12 12:44 · IANA 局域网IP(Private-Use)
新手上路
★
积分 7 发帖 7 注册 2010-08-05 13:26 UID 171798 性别 男
状态 离线
谢谢讲解。我差不多明白了。
但是改后的代码好像运行不了?
第 10 楼
发表于 2010-08-12 15:24 · 中国 湖北 黄石 电信
中级用户
★★
积分 330 发帖 244 注册 2006-04-14 14:07 UID 53823 性别 男 来自 湖北
状态 离线
理解错了,7楼为输出匹配行下的连续n行
下面的是输出匹配行下的第n行
@echo off&setlocal ENABLEDELAYEDEXPANSION&set "flag=%~1"
echo "%~1"|findstr "">nul||(echo 请输入数字参数!&exit/b)
for %%i in (*.txt) do (
set/a pNext=0
title.处理文件:%%i
for /f "usebackq delims=" %%a in ("%%~i") do (
echo %%a|find "下一行为输出结果">nul&&set/a PNext=!flag!||set /a pNext-=1
if !pnext! equ 0 echo.%%a
)
)
第 11 楼
发表于 2010-08-12 20:15 · IANA 局域网IP(Private-Use)
新手上路
★
积分 7 发帖 7 注册 2010-08-05 13:26 UID 171798 性别 男
状态 离线
第 12 楼
发表于 2010-08-14 17:41 · 中国 上海 静安区 电信
初级用户
★
积分 28 发帖 28 注册 2010-07-28 11:06 UID 171355 性别 男
状态 离线
本人比较菜哈。各位高手
谁能帮忙解释一下 flag=%~1 是什么意思啊。
第 13 楼
发表于 2010-08-14 19:24 · 中国 北京 中国电信北京研究院
初级用户
★
积分 37 发帖 32 注册 2008-08-21 15:50 UID 123784 性别 男
状态 离线
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正