0

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

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

有任何想法吗?

谢谢

4

3 回答 3

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
于 2015-05-21T08:16:50.893 回答
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 )
于 2015-05-21T16:39:04.037 回答
0

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

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
    )
)
于 2017-04-28T20:17:25.750 回答