中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-19 02:07
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎么用批处理将特定字符行的下一行输出? 查看 1,172 回复 12
楼 主 怎么用批处理将特定字符行的下一行输出? 发表于 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
性别 男
状态 离线
sed 一行代码完成,自己搜索百度sed的帮助
论坛跳转: