我有一个批处理文件,它在日志文件的最后一行(下面的代码)中找到一个字符串
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in (templog.log) do (
set var=%%a
)
echo !var! > string.log
findstr /m ":help" string.log >nul
if %errorlevel%==0 (
echo !var!
echo !var! >> output.txt
endlocal
goto NEXTCODE
)
这样做是在日志文件中搜索最后一行中的:help
,如果找到它,则转到下一段代码。假设日志文件的最后一行包含以下内容......
[11:13:55] [Example]: [Time] <Tag435> :help
如果日志文件的最后一行是上述行,我的程序会检测到它包含:help
并继续前进。在下一部分代码中,我尝试将其设置为在:help
之前直接为单词设置变量,在本例中为<Tag435>
。有什么办法可以做到这一点吗?我曾尝试搜索庞大的互联网,并且只找到了检测特定单词的方法,而不是那个特定单词之前的单词。我在另一个帖子上找到了这个并根据我的需要进行了修改......
set str1=!var!
if not x%str1:<Tag435>=%==x%str1% goto NEXTSECTION
但是,在我的日志文件中,<Tag435>
之前并不总是:help
,这意味着我必须为每个可能的单词添加if
语句:help
之前,我不想这样做。任何帮助将不胜感激!
答案 0 :(得分:0)
这是我的分解:
首先,找出文件中有多少行:
@echo off
for /F "delims=[]" %%a in ('find /N /V "" logfile.log') do ( set FILE_SIZE=%%a)
set /A LAST_LINE=%FILE_SIZE%-1
查看最后一行,看它是否包含:help
more +%LAST_LINE% logfile.log | findstr /M ":help" > nul
如果其中包含文本:help
,请获取第6个标记(标记在#34之前;帮助&#34;)
if %errorlevel% == 0 (
for /F "tokens=6 delims=:<>[] " %%a in ('more +%LAST_LINE% logfile.log') do (
echo(Found %%a before :help
)
)
输出为:Found Tag435 before :help
@echo off
for /F "delims=[]" %%a in ('find /N /V "" logfile.log') do ( set FILE_SIZE=%%a)
set /A LAST_LINE=%FILE_SIZE%-1
more +%LAST_LINE% logfile.log | findstr /M ":help" > nul
if %errorlevel% == 0 (
for /F "tokens=6 delims=:<>[] " %%a in ('more +%LAST_LINE% logfile.log') do (
echo(Found %%a before :help
)
)