Board logo

标题: [文本处理] [已解决]more如何获取文本指定范围内的行内容? [打印本页]

作者: 522235677    时间: 2013-4-8 18:40     标题: [已解决]more如何获取文本指定范围内的行内容?

本帖最后由 pcl_test 于 2016-4-3 17:14 编辑
  1. more /e +5 %0 >"%temp%\down.vbs"
复制代码
这个只能从读取从第五行一只到最后。
我就是想只读取 第五行到第十行这五行内容。不知道能不能行。看了系统的帮助more /? 弄了半天都不行
作者: Batcher    时间: 2013-4-8 22:18

more命令没有这样的参数,你得自己想办法。
作者: yukunldhy    时间: 2013-4-8 23:33

不知道这样行不? 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
复制代码

作者: CrLf    时间: 2013-4-9 03:54

打印 5 ~ 12 行的内容,需要用第三方工具 sed:
  1. sed "5,12!d"
复制代码
因为 more 是外部命令,所以效率不比 sed 有优势
作者: CrLf    时间: 2013-4-9 03:59

非要用 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
复制代码

作者: CrLf    时间: 2013-4-9 04:03

纯内部命令可以这样:
  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
复制代码

作者: CrLf    时间: 2013-4-9 04:04

或这样
  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
复制代码

作者: CrLf    时间: 2013-4-9 04:05

这样也行:
  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
复制代码

作者: CrLf    时间: 2013-4-9 04:05

也可以这样:
  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
复制代码

作者: 522235677    时间: 2013-4-9 09:20

回复 8# CrLf


    这么多办法,我怎么就没想到呢
作者: 522235677    时间: 2013-4-9 11:31

  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)
复制代码
感谢楼上几位帮忙,得到启发了。具体的我就是这么写的。
作者: 34205    时间: 2015-2-23 21:35

回复 8# CrLf


    学习了1111111111
作者: happy886rr    时间: 2016-4-3 15:42

  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
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2