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

时间:2015-05-21 08:08:17

标签: string batch-file file-io last-occurrence

美好的一天,我想知道如何创建批处理脚本,搜索包含以*==============开头的多行的文本文件。我希望它找到这样一行的最后一次出现,然后只在脚本的其余部分使用所有内容。

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

有什么想法吗?

由于

3 个答案:

答案 0 :(得分:1)

您可以扫描该行的文件(正如您现在所做的那样),但不是直接处理它,而是以某种方式存储*==============以下的行(例如,在临时文件中)。如果您找到另一行,例如*==============,则删除此前保存的所有内容,然后再次开始保存以下行。您将在包含*==============的最后一行结束,保存它下面的所有内容并到达文件末尾,这样只有最后一个块将保留在临时文件中。现在您可以处理该文件,并确保它仅包含最后*==============行以下的数据。

代码看起来像这样:

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

答案 1 :(得分:0)

您可以使用findstr命令查找以*==============开头的行并获取最后一行的号码,并在skip for选项中使用此号码命令:

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 )

答案 2 :(得分:0)

我在寻找有效解决问题的解决方案时遇到了这个答案。迈克尔在上面的回答让我走上正轨;然而,只有一些错别字阻止了它的工作。对于未来的搜索者来说,这是一个有效的版本:

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