Board logo

标题: 怎么用批处理将特定字符行的下一行输出? [打印本页]

作者: cjtielu     时间: 2010-8-10 20:33    标题: 怎么用批处理将特定字符行的下一行输出?

文件中某些行为特定字符,比如“下一行为输出结果”,我想将文件中这一行的下一行(也就是输出的结果)输出,这样的文件有很多个,怎么用批处理编程?
请教各位大侠,谢谢!
作者: cjtielu     时间: 2010-8-11 12:45
自己顶一下,期待解答。亟盼!
作者: freeants001     时间: 2010-8-11 17:39
试试下面的代码:
@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

作者: cjtielu     时间: 2010-8-11 19:17
确实强悍,太厉害了。正是我想要的。
还有个小小的要求:我想把这些结果输出到文件中,怎么办?
另外,有时候不是下一行,可能是下两行,就是说下面的第几行能是个用户可以输入的变量通用性就好了。
大侠确实太厉害了,十分感谢。
作者: cjtielu     时间: 2010-8-11 19:19
我改了几下,没能达到我想要的目的。就是简单的输出结果到文件都没改出来。
echo %%a|find "下一行为输出结果">nul&&set PNext=true||set pNext=false
主要是这行代码不明白。
作者: cjtielu     时间: 2010-8-11 19:25
实在有点菜,怎么把结果输出到文件我知道了。
但是第二个问题,就是不一定是下面一行,比如下面第三行或者第五行这个不知道怎么写?
还请大侠帮忙!
作者: freeants001     时间: 2010-8-11 20:02
稍作修改下就可以了,要输入到文件可以在命令行下重定向
@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

作者: freeants001     时间: 2010-8-11 20:36


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

以上为我所知道的
作者: cjtielu     时间: 2010-8-12 12:44
谢谢讲解。我差不多明白了。
但是改后的代码好像运行不了?
作者: freeants001     时间: 2010-8-12 15:24
理解错了,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
        )
)

作者: cjtielu     时间: 2010-8-12 20:15
还是无法运行啊,屏幕一闪而过
作者: wangyang331407     时间: 2010-8-14 17:41
本人比较菜哈。各位高手
谁能帮忙解释一下 flag=%~1 是什么意思啊。
作者: nanhezzb     时间: 2010-8-14 19:24
sed 一行代码完成,自己搜索百度sed的帮助