![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-27 14:40 |
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,276 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » for语句中如果要处理中间的几行,怎么写skip |
| 可打印版本 3,164 / 20 |
| 第1楼 renrenrenshk | 发表于 2007-09-16 19:22 |
| 初级用户 发帖 15 积分 39 来自 福建 | |
|
for语句中如果要处理中间的几行,怎么写skip 大家来讨论下这个问题吧,for语句中如果要处理某个命令输出的中间的几行文字请问要如何处理(比如skip=n是跳过开头n行,如果同时还要跳过最后几行呢,那么这个skip该怎么表达。。。。
|
|
| 第2楼 lxmxn | 发表于 2007-09-16 21:38 |
| 版主 发帖 4,938 积分 11,386 | |
|
你可以在处理完了中间的行之后,用一个goto命令跳转到for命令之外。
也可以用 if+for 来处理。 |
|
| 第3楼 renrenrenshk | 发表于 2007-09-16 22:30 |
| 初级用户 发帖 15 积分 39 来自 福建 | |
|
请问二楼的那你如何判断具体执行到那个位置跳出 能不能举个具体例子
|
|
| 第4楼 lxmxn | 发表于 2007-09-16 23:21 |
| 版主 发帖 4,938 积分 11,386 | |
|
比如我现在有一个ok.txt文件,内容如下:
1 1 1 1 1 我现在只显示第三到第七行的内容,可以用下面这个: |
|
| 第5楼 renrenrenshk | 发表于 2007-09-17 09:01 |
| 初级用户 发帖 15 积分 39 来自 福建 | |
|
楼上的例子有点繁 特改如下:
----------------------------------------------------------------------------------------------- @echo off rem 处理第三到第七行 for /f "skip=2 tokens=1* delims=:" %%a in ('findstr /n . ok.txt') do ( echo 第%%a行 -- %%b if %%a==7 goto :end ) :end echo the end pause ------------------------------------------------------------------------------------------------- [ Last edited by renrenrenshk on 2007-9-17 at 09:04 AM ] |
|
| 第6楼 renrenrenshk | 发表于 2007-09-17 09:12 |
| 初级用户 发帖 15 积分 39 来自 福建 | |
|
楼上的方法还不是非常灵活,比如dir命令的输出结果的行数是经常变的(随着文件夹的不同而不同),只有头尾几行是不变的,如果要处理除了那些不变 的几行外的所有行,那么上面的方法就不适合了
附: C:\>dir /a-d /-c 驱动器 C 中的卷没有标签。 卷的序列号是 98C6-B5CC C:\ 的目录 2006-09-22 11:32 0 AUTOEXEC.BAT 2006-09-22 11:25 211 boot.ini 2004-08-17 20:00 322730 bootfont.bin 2006-09-22 11:32 0 CONFIG.SYS 2006-08-12 19:30 0 dfinstall.log 2007-09-17 08:17 266919936 hiberfil.sys 2006-09-22 11:32 0 IO.SYS 2006-09-22 11:32 0 MSDOS.SYS 2004-08-17 20:00 47564 NTDETECT.COM 2004-02-17 14:49 285344 ntldr 2007-09-17 08:28 206 ok.txt 2007-09-17 08:17 402653184 pagefile.sys 2007-09-17 08:18 8871936 Persi0.sys 2006-09-24 11:19 27214 _NavCClt.Log 14 个文件 679128325 字节 0 个目录 11131838464 可用字节 这时如果要处理除开头5行和结尾两行外的所有行那么楼上的方法就不行,不知那为达人 能提供更好的方法. [ Last edited by renrenrenshk on 2007-9-17 at 09:15 AM ] |
|
| 第7楼 wudixin96 | 发表于 2007-09-17 10:30 |
| 银牌会员 发帖 931 积分 1,928 | |
|
for /f "delims=" %%i in ('dir /a-d /-c^|findstr /r "*--"') do echo %%i
只针对6楼的问题 其实用sed可以很好的解决楼主的问题 [ Last edited by wudixin96 on 2007-9-17 at 10:31 AM ] |
|
| 第8楼 terse | 发表于 2007-09-17 10:42 |
| 银牌会员 发帖 946 积分 2,404 | |
|
处理指定行:
for /f "delims=" %%i in ('findstr /n .* test.txt') do ( set /a mn=%%i 2>nul set "m=%%i" setlocal enabledelayedexpansion set m=!m:*:=! if !mn! GEQ 3 if !mn! LEQ 7 echo.!m!>>test2.txt endlocal [ Last edited by terse on 2007-9-18 at 12:30 AM ] |
|
| 第9楼 6692836 | 发表于 2007-09-17 15:58 |
| 初级用户 发帖 21 积分 44 | |
|
4楼的程序没有问题.学习了
能解释一下for语句中的 delims=:的作用和findstr /n .* ok.txt的语法 我不懂 .谢谢了 [ Last edited by 6692836 on 2007-9-17 at 04:26 PM ] |
|
| 第10楼 6692836 | 发表于 2007-09-17 16:30 |
| 初级用户 发帖 21 积分 44 | |
|
对不起,点错了.
|
|
| 第11楼 lxmxn | 发表于 2007-09-17 16:39 |
| 版主 发帖 4,938 积分 11,386 | |
Originally posted by 6692836 at 2007-9-17 15:58: 看看 findstr 命令的帮助,看看 /n 参数有什么用,你就会明白为什么这里的 for 会使用 "delims=:" 了. |
|
| 第12楼 wudixin96 | 发表于 2007-09-17 16:42 |
| 银牌会员 发帖 931 积分 1,928 | |
|
我没有评2分的权限,帮不了你了,6692836
|
|
| 第13楼 renrenrenshk | 发表于 2007-09-17 17:50 |
| 初级用户 发帖 15 积分 39 来自 福建 | |
|
7楼 写的不错 很精辟!!!!!!!!!
----------------------------------- 下面针对九楼和四楼的 发表一下个人的观点。。。不是恶意攻击。。切莫误会。。 我们不是说四楼的代码有没有问题,而是四楼的代码不够精辟,代码中有些多余的东西 让人看了 反而不易理解 就像写程序要讲究算法优化和可读性,四楼的代码就犯了这两个错误。。。 [ Last edited by renrenrenshk on 2007-9-17 at 06:40 PM ] |
|
| 第14楼 renrenrenshk | 发表于 2007-09-17 18:16 |
| 初级用户 发帖 15 积分 39 来自 福建 | |
|
虽然搂住的问题通过各种途径可以解决,但如果for语句中的skip可以完成这项功能,那么实现起来应该会更简单一些。。。 不知skip是否具有这个功能。。。等待达人指导。。。
[ Last edited by renrenrenshk on 2007-9-17 at 06:17 PM ] |
|
| 第15楼 lxmxn | 发表于 2007-09-17 18:46 |
| 版主 发帖 4,938 积分 11,386 | |
Originally posted by renrenrenshk at 2007-9-17 09:12: 这位兄弟,4楼之前的帖子,你哪一点提到过关于dir命令了? |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |