找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 45232|回复: 12

[文本处理] [已解决]more如何获取文本指定范围内的行内容?

[复制链接]
发表于 2013-4-8 18:40:41 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-4-3 17:14 编辑
  1. more /e +5 %0 >"%temp%\down.vbs"
复制代码
这个只能从读取从第五行一只到最后。
我就是想只读取 第五行到第十行这五行内容。不知道能不能行。看了系统的帮助more /? 弄了半天都不行

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-4-8 22:18:19 | 显示全部楼层
more命令没有这样的参数,你得自己想办法。
发表于 2013-4-8 23:33:26 | 显示全部楼层
不知道这样行不? for(累加取行)+if(判断,大于等于5,小于等于10)
  1. @echo off
  2. set num=0
  3. nul>"%temp%\5-10.txt"
  4. setlocal enabledelayedexpansion
  5. for /f "delims=" %%i in (XXX.txt) do (
  6. set /a num+=1
  7. set str=%%i
  8. if !num! geq 5 (
  9. if !num! leq 10 echo !str! >>"%temp%\5-10.txt"
  10. )
  11. )
  12. pause
复制代码
发表于 2013-4-9 03:54:04 | 显示全部楼层
打印 5 ~ 12 行的内容,需要用第三方工具 sed:
  1. sed "5,12!d"
复制代码
因为 more 是外部命令,所以效率不比 sed 有优势
发表于 2013-4-9 03:59:39 | 显示全部楼层
非要用 more 的话,就比较猥琐了,适合处理超大文件,比起 sed 唯一点优势是系统自带:
  1. @echo off
  2. set "file=a.txt"
  3. set /a min=5,max=12
  4. for /f %%a in ('find /c /v ""^<"%file%"') do set /a rev=max-%%a
  5. more +%min% "%file%"|sort /+65535 /rec 65535 /o "%file%.tmp"
  6. more +%rev% "%file%.tmp"|sort /+65535 /rec 65535 /o "%file%"
  7. del "%file%.tmp" >nul
  8. pause
复制代码
发表于 2013-4-9 04:03:27 | 显示全部楼层
纯内部命令可以这样:
  1. @echo off
  2. set "file=a.txt"
  3. set /a min=5,max=12

  4. setlocal enabledelayedexpansion
  5. for /f "skip=%min% tokens=1* delims=:" %%a in ('findstr /n .* "!file!"') do (
  6.    if %%a leq %max% echo;%%b
  7. )>!file!.txt
复制代码
发表于 2013-4-9 04:04:38 | 显示全部楼层
或这样
  1. @echo off
  2. set "file=a.txt"
  3. set /a min=5,max=12

  4. setlocal enabledelayedexpansion
  5. for /f "delims=" %%a in ('more +%min% "!file!"') do (
  6.    set /a min+=1
  7.    if !min! neq %max% echo;%%a
  8. )>!file!.txt
复制代码
发表于 2013-4-9 04:05:22 | 显示全部楼层
这样也行:
  1. @echo off
  2. set "file=a.txt"
  3. set /a min=5,max=12

  4. setlocal enabledelayedexpansion
  5. for /f "skip=%min%" %%a in (!file!) do (
  6.    set /a min+=1
  7.    if !min! neq %max% echo;%%a
  8. )>!file!.txt
复制代码
发表于 2013-4-9 04:05:54 | 显示全部楼层
也可以这样:
  1. @echo off
  2. set "file=a.txt"
  3. set /a min=5,max=12

  4. setlocal enabledelayedexpansion
  5. (for /l %%a in (1 1 %min%) do set /p=
  6. for /l %%a in (%min% 1 %max%) do set /p str=&echo;!str!
  7. )<!file!>!file!.txt
  8. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2013-4-9 09:20:14 | 显示全部楼层
回复 8# CrLf


    这么多办法,我怎么就没想到呢
 楼主| 发表于 2013-4-9 11:31:17 | 显示全部楼层
  1. :uu
  2. set hs=0
  3. for /f "delims=" %%a in ('more +%1 "%n0%"') do (
  4.         set /a hs+=1
  5.         echo %%a >>%3
  6.         if "!hs!"=="%2" goto :eof)
复制代码
感谢楼上几位帮忙,得到启发了。具体的我就是这么写的。
发表于 2015-2-23 21:35:08 | 显示全部楼层
回复 8# CrLf


    学习了1111111111
发表于 2016-4-3 15:42:39 | 显示全部楼层

  1. @echo off
  2. CALL :More 3 2 "%~f0"
  3. set/p=&exit
  4. 显示的内容为过滤头部3行和过滤尾部2行
  5. :More <HeadCut> <EndCut> <FileName>
  6. more +%1 %3|sort /+1024 /rec 1024|more +%2|sort /+1024 /rec 1024|more +1
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 04:35 , Processed in 0.025646 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表