Text 提取文本文件的节

Text 提取文本文件的节,text,batch-file,Text,Batch File,我正在尝试编写一个批处理文件,它将在给定的文本文件中提取6000到6999行。通过谷歌搜索,我获得了以下代码——不过这给了我一个空白的输出文件 @echo off SetLocal EnableDelayedExpansion type nul > nodedata.txt set StartText=6000 set EndText=7000 set Flag=0 for /f "tokens=* delims=" %%a in ('type out.txt') do ( if /i

我正在尝试编写一个批处理文件,它将在给定的文本文件中提取6000到6999行。通过谷歌搜索,我获得了以下代码——不过这给了我一个空白的输出文件

@echo off 
SetLocal EnableDelayedExpansion
type nul > nodedata.txt
set StartText=6000
set EndText=7000
set Flag=0
for /f "tokens=* delims=" %%a in ('type out.txt') do (
if /i "%StartText%" EQU "%%a" (set Flag=1) 
if /i "%EndText%" EQU "%%a" (set Flag=0) 
if !Flag! EQU 1 echo %%a >> nodedata1.txt
)
关于我哪里出了问题,您有什么想法吗?

您应该安装,然后查看问题的答案。。。Windows不是为文本处理而设计的

Windows用户…

您应该安装,然后查看问题的答案。。。Windows不是为文本处理而设计的


Windows用户…

这里是一个快速简单的纯批处理解决方案

for /l %%a in (6000,1,6999) do (
more C:\file.txt +%%a >>C:\extracted.txt
)

这是一个快速简单的纯批量解决方案

for /l %%a in (6000,1,6999) do (
more C:\file.txt +%%a >>C:\extracted.txt
)

这是一个运行速度更快的批处理解决方案

@echo off
SetLocal EnableDelayedExpansion
set count=0
(for /F "skip=5999 delims=" %%a in (out.txt) do (
   echo %%a
   set /A count+=1
   if !count! equ 1000 goto endLoop
   )
) > nodedata1.txt
:endLoop

这是一个运行速度更快的批处理解决方案

@echo off
SetLocal EnableDelayedExpansion
set count=0
(for /F "skip=5999 delims=" %%a in (out.txt) do (
   echo %%a
   set /A count+=1
   if !count! equ 1000 goto endLoop
   )
) > nodedata1.txt
:endLoop

您的解决方案执行
more
命令1000次,每次打开输出文件并查找EOF以追加下一行。这是没有效率的…您的解决方案执行
more
命令1000次,每次打开输出文件并查找EOF以追加下一行。这是没有效率的…如果微软为此制作了一个实用程序,它会发出类似foo.txt中的
found6000这样的消息。复制行6000。复制行6001。。。复制第6999行。已复制1000行。
这些将与输出混合,并需要一个选项来禁用它们。如果Microsoft为此制作了一个实用程序,它将发出类似foo.txt中的
Found 6000的消息。复制行6000。复制行6001。。。复制第6999行。已复制1000行。
这些将与输出混合,并需要一个选项来禁用它们。