标题: [文本处理] [已解决]more如何获取文本指定范围内的行内容? [打印本页]
作者: 522235677 时间: 2013-4-8 18:40 标题: [已解决]more如何获取文本指定范围内的行内容?
本帖最后由 pcl_test 于 2016-4-3 17:14 编辑
- 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)- @echo off
- set num=0
- nul>"%temp%\5-10.txt"
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in (XXX.txt) do (
- set /a num+=1
- set str=%%i
- if !num! geq 5 (
- if !num! leq 10 echo !str! >>"%temp%\5-10.txt"
- )
- )
- pause
复制代码
作者: CrLf 时间: 2013-4-9 03:54
打印 5 ~ 12 行的内容,需要用第三方工具 sed:复制代码
因为 more 是外部命令,所以效率不比 sed 有优势
作者: CrLf 时间: 2013-4-9 03:59
非要用 more 的话,就比较猥琐了,适合处理超大文件,比起 sed 唯一点优势是系统自带:- @echo off
- set "file=a.txt"
- set /a min=5,max=12
- for /f %%a in ('find /c /v ""^<"%file%"') do set /a rev=max-%%a
- more +%min% "%file%"|sort /+65535 /rec 65535 /o "%file%.tmp"
- more +%rev% "%file%.tmp"|sort /+65535 /rec 65535 /o "%file%"
- del "%file%.tmp" >nul
- pause
复制代码
作者: CrLf 时间: 2013-4-9 04:03
纯内部命令可以这样:- @echo off
- set "file=a.txt"
- set /a min=5,max=12
-
- setlocal enabledelayedexpansion
- for /f "skip=%min% tokens=1* delims=:" %%a in ('findstr /n .* "!file!"') do (
- if %%a leq %max% echo;%%b
- )>!file!.txt
复制代码
作者: CrLf 时间: 2013-4-9 04:04
或这样- @echo off
- set "file=a.txt"
- set /a min=5,max=12
-
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('more +%min% "!file!"') do (
- set /a min+=1
- if !min! neq %max% echo;%%a
- )>!file!.txt
复制代码
作者: CrLf 时间: 2013-4-9 04:05
这样也行:- @echo off
- set "file=a.txt"
- set /a min=5,max=12
-
- setlocal enabledelayedexpansion
- for /f "skip=%min%" %%a in (!file!) do (
- set /a min+=1
- if !min! neq %max% echo;%%a
- )>!file!.txt
复制代码
作者: CrLf 时间: 2013-4-9 04:05
也可以这样:- @echo off
- set "file=a.txt"
- set /a min=5,max=12
-
- setlocal enabledelayedexpansion
- (for /l %%a in (1 1 %min%) do set /p=
- for /l %%a in (%min% 1 %max%) do set /p str=&echo;!str!
- )<!file!>!file!.txt
- pause
复制代码
作者: 522235677 时间: 2013-4-9 09:20
回复 8# CrLf
这么多办法,我怎么就没想到呢
作者: 522235677 时间: 2013-4-9 11:31
- :uu
- set hs=0
- for /f "delims=" %%a in ('more +%1 "%n0%"') do (
- set /a hs+=1
- echo %%a >>%3
- if "!hs!"=="%2" goto :eof)
复制代码
感谢楼上几位帮忙,得到启发了。具体的我就是这么写的。
作者: 34205 时间: 2015-2-23 21:35
回复 8# CrLf
学习了1111111111
作者: happy886rr 时间: 2016-4-3 15:42
- @echo off
- CALL :More 3 2 "%~f0"
- set/p=&exit
- 显示的内容为过滤头部3行和过滤尾部2行
- :More <HeadCut> <EndCut> <FileName>
- more +%1 %3|sort /+1024 /rec 1024|more +%2|sort /+1024 /rec 1024|more +1
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |