中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎么用批处理将特定字符行的下一行输出?
作者:
标题: 怎么用批处理将特定字符行的下一行输出? 上一主题 | 下一主题
cjtielu
新手上路





积分 7
发帖 7
注册 2010-8-5
状态 离线
『楼 主』:  怎么用批处理将特定字符行的下一行输出?

文件中某些行为特定字符,比如“下一行为输出结果”,我想将文件中这一行的下一行(也就是输出的结果)输出,这样的文件有很多个,怎么用批处理编程?
请教各位大侠,谢谢!

2010-8-10 20:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cjtielu
新手上路





积分 7
发帖 7
注册 2010-8-5
状态 离线
『第 2 楼』:  

自己顶一下,期待解答。亟盼!

2010-8-11 12:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
freeants001
中级用户




积分 330
发帖 244
注册 2006-4-14
来自 湖北
状态 离线
『第 3 楼』:  

试试下面的代码:
@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


2010-8-11 17:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cjtielu
新手上路





积分 7
发帖 7
注册 2010-8-5
状态 离线
『第 4 楼』:  

确实强悍,太厉害了。正是我想要的。
还有个小小的要求:我想把这些结果输出到文件中,怎么办?
另外,有时候不是下一行,可能是下两行,就是说下面的第几行能是个用户可以输入的变量通用性就好了。
大侠确实太厉害了,十分感谢。

2010-8-11 19:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cjtielu
新手上路





积分 7
发帖 7
注册 2010-8-5
状态 离线
『第 5 楼』:  

我改了几下,没能达到我想要的目的。就是简单的输出结果到文件都没改出来。
echo %%a|find "下一行为输出结果">nul&&set PNext=true||set pNext=false
主要是这行代码不明白。

2010-8-11 19:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cjtielu
新手上路





积分 7
发帖 7
注册 2010-8-5
状态 离线
『第 6 楼』:  

实在有点菜,怎么把结果输出到文件我知道了。
但是第二个问题,就是不一定是下面一行,比如下面第三行或者第五行这个不知道怎么写?
还请大侠帮忙!

2010-8-11 19:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
freeants001
中级用户




积分 330
发帖 244
注册 2006-4-14
来自 湖北
状态 离线
『第 7 楼』:  

稍作修改下就可以了,要输入到文件可以在命令行下重定向
@echo off&setlocal ENABLEDELAYEDEXPANSION&set "flag=%~1"
echo "%~1"|findstr "[0-9]">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


2010-8-11 20:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
freeants001
中级用户




积分 330
发帖 244
注册 2006-4-14
来自 湖北
状态 离线
『第 8 楼』:  



  Quote:
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为成功,其它为失败。

以上为我所知道的

2010-8-11 20:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cjtielu
新手上路





积分 7
发帖 7
注册 2010-8-5
状态 离线
『第 9 楼』:  

谢谢讲解。我差不多明白了。
但是改后的代码好像运行不了?

2010-8-12 12:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
freeants001
中级用户




积分 330
发帖 244
注册 2006-4-14
来自 湖北
状态 离线
『第 10 楼』:  

理解错了,7楼为输出匹配行下的连续n行
下面的是输出匹配行下的第n行
@echo off&setlocal ENABLEDELAYEDEXPANSION&set "flag=%~1"
echo "%~1"|findstr "[0-9]">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
        )
)


2010-8-12 15:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cjtielu
新手上路





积分 7
发帖 7
注册 2010-8-5
状态 离线
『第 11 楼』:  

还是无法运行啊,屏幕一闪而过

2010-8-12 20:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wangyang331407
初级用户





积分 28
发帖 28
注册 2010-7-28
状态 离线
『第 12 楼』:  

本人比较菜哈。各位高手
谁能帮忙解释一下 flag=%~1 是什么意思啊。

2010-8-14 17:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
nanhezzb
初级用户





积分 37
发帖 32
注册 2008-8-21
状态 离线
『第 13 楼』:  

sed 一行代码完成,自己搜索百度sed的帮助

2010-8-14 19:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: