如何在Batch中的确定字符串之前直接找到变量字符串

时间:2017-02-28 16:34:48

标签: windows batch-file cmd

我有一个批处理文件,它在日志文件的最后一行(下面的代码)中找到一个字符串

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之前,我不想这样做。任何帮助将不胜感激!

1 个答案:

答案 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
    ) 
)