[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

more命令没有这样的参数,你得自己想办法。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

不知道这样行不? 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
复制代码
凡事預則立,不預則廢!

TOP

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

TOP

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

TOP

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

TOP

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

TOP

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

TOP

也可以这样:
  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

评分人数

TOP

回复 8# CrLf


    这么多办法,我怎么就没想到呢

TOP

  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)
复制代码
感谢楼上几位帮忙,得到启发了。具体的我就是这么写的。

TOP

回复 8# CrLf


    学习了1111111111

TOP

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

TOP

返回列表