批量:找到以字符开头的最后一行,然后从那里开始读取

问题描述 投票:0回答:3

美好的一天,我想知道如何创建一个批处理脚本来搜索包含以

*==============
开头的多行的文本文件。我希望它找到最后一次出现这样的行,然后只在脚本的其余部分中使用此后的所有内容。

目前我使用

for /F "tokens=*" %%A in (%file%.txt) do ( [process] %%A )
扫描每一行。

有什么想法吗?

谢谢

string batch-file file-io
3个回答
1
投票

您可以扫描文件中的这一行(就像您现在正在执行的那样),但您可以以某种方式存储下面的行(例如在临时文件中),而不是直接处理它。如果您找到类似

*==============
的另一行,则删除之前保存的所有内容,然后再次开始保存下面的行。您将最终到达包含
*==============
的最后一行,保存其下方的所有内容并到达文件末尾,因此只有最后一个块将保留在临时文件中。现在您可以处理该文件并确保它仅包含最后
*==============
行下方的数据。

代码看起来像这样:

*==============



0
投票
SETLOCAL EnableDelayedExpansion for /F "tokens=*" %%A in (%file%.txt) do ( SET currentline = %%A SET currentstring=!currentstring~0,15! IF !currentstring!==*============== ( TYPE NUL > tempFile.txt ) ELSE ( ECHO %%A>>tempFile.txt ) ) ::process the data from tempFile.txt

命令查找以

findstr
开头的行并获取最后一行的编号,并在
*==============
命令的
skip
选项中使用该编号:

for



0
投票

rem Get the line number of the last line that start with "*==============" for /F "delims=:" %%a in ('findstr /N "^\*==============" %file%.txt') do set lastLine=%%a rem Process the file from the next line to that one on for /F "skip=%lastLine% tokens=*" %%A in (%file%.txt) do ( [process] %%A )

© www.soinside.com 2019 - 2024. All rights reserved.