最好是单线的,我该如何及时地(最多几秒钟)从大型(3MB +)文本文件中删除开头的行范围。我见过使用for /f
和findstr
的解决方案,但是for循环使它非常慢,并且工具more
无法处理较大的文件而不会挂起。
@echo off &setlocal
set "testing.txt=%~1"
(for /f "delims=" %%i in ('findstr /n "^" "testing.txt"') do (
set "line=%%i"
for /f "delims=:" %%a in ("%%i") do set "row=%%a"
setlocal enabledelayedexpansion
set "line=!line:*:=!"
if !row! gtr 100 echo(!line!
endlocal
))>output.txt
这里是尝试。这是非常慢的。任何建议将不胜感激。
答案 0 :(得分:0)
据我所知,您想跳过巨大的文本文件的前100行,并想返回其余的行。
好吧,当我查看您的代码时,我首先看到的是您嵌套了两个for /F
循环,这可能会使事情变慢。
内部循环只是将前面的行号分割开,并用冒号与其他行分隔。
为此,您可以(mis-)使用set /A
,当您使用其隐式变量扩展时,它可以将字符串转换为数值(因此,没有%
或{{1 }});当遇到第一个非数字字符(在我们的情况下为!
)时,此过程停止。因此,只需将内部:
循环替换为:
for /F
这肯定会加快速度。但是,请注意,这会将输入文本文件限制为2 ^ 31-1行。请注意,每行的字符/字节数仍限制为8190。
顺便说一句,您不必单独执行set /A "row=line"
,只需删除此步骤并将set "line=!line:*:=!"
替换为echo(!line!
。
如果您不需要保留空行,那么整个方法就是这样简单:
echo(!line:*:=!
这不限制文件大小,但行长不得超过8191个字符/字节。
答案 1 :(得分:0)
这是消除大文件中前几行的最快方法。按照您的要求以单线形式编写:
@echo off
< testing.txt ( (for /L %%i in (1,1,100) do set /P "=") & findstr "^" ) > output.txt
但是,请注意,此方法最多只能管理长达1023个字符的行,因为它使用set /P
命令来读取和丢弃不需要的行...
有关此方法的说明,请参见this answer。