批处理:找到以字符开头的最后一行,然后从那里开始阅读
Batch: find last line that starts with character then start reading from there
你好,我想知道如何创建一个批处理脚本来搜索包含以 *==============
开头的多行的文本文件。我希望它找到这样一行的最后一次出现,然后只在脚本的其余部分使用此后的所有内容。
目前我使用for /F "tokens=*" %%A in (%file%.txt) do ( [process] %%A )
扫描每一行。
有什么想法吗?
谢谢
您可以扫描文件中的这一行(就像您现在所做的那样),但您可以以某种方式存储 *==============
下面的行(例如,在临时文件中),而不是直接处理它。如果你发现另一行像 *==============
你删除你保存到那时的所有内容并再次开始保存下面的行。您将在包含 *==============
的最后一行结束,保存它下面的所有内容并到达文件末尾,因此只有最后一个块将保留在临时文件中。现在您可以处理该文件并确保它仅包含最后 *==============
行下方的数据。
代码看起来像这样:
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
命令查找以*==============
开头的行并获取最后一行的编号,并在[=14]的skip
选项中使用该编号=]命令:
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 )
我在寻找有效解决同一问题的解决方案时遇到了这个答案。 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
)
)
你好,我想知道如何创建一个批处理脚本来搜索包含以 *==============
开头的多行的文本文件。我希望它找到这样一行的最后一次出现,然后只在脚本的其余部分使用此后的所有内容。
目前我使用for /F "tokens=*" %%A in (%file%.txt) do ( [process] %%A )
扫描每一行。
有什么想法吗?
谢谢
您可以扫描文件中的这一行(就像您现在所做的那样),但您可以以某种方式存储 *==============
下面的行(例如,在临时文件中),而不是直接处理它。如果你发现另一行像 *==============
你删除你保存到那时的所有内容并再次开始保存下面的行。您将在包含 *==============
的最后一行结束,保存它下面的所有内容并到达文件末尾,因此只有最后一个块将保留在临时文件中。现在您可以处理该文件并确保它仅包含最后 *==============
行下方的数据。
代码看起来像这样:
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
命令查找以*==============
开头的行并获取最后一行的编号,并在[=14]的skip
选项中使用该编号=]命令:
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 )
我在寻找有效解决同一问题的解决方案时遇到了这个答案。 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
)
)