Windows - 读取文本文件的最后一行,查找单词/短语执行操作

时间:2016-02-02 04:24:14

标签: string windows batch-file

我正在尝试执行以下操作:

我有一个我想读的文件,如果在最后一行找到某个短语,我想执行一个动作。

这是文本文件的最后几行

PC要么一遍又一遍地重复上述日志文件,要么就不会有任何关闭。

我基本上想要阅读最后一行并查看它是否找到“无法获得注册状态”以及是否运行脚本。

这是我到目前为止所拥有的,但我认为我无法接近我应该做的事情。任何帮助都会非常感激,因为我不擅长编写脚本。我基本上试图计算行数并将其存储在变量中:

@echo off
for /f %%i in ('find /v /c "" ^< C:\Client.log') do set /a lines=%%i
set /a startLine=%lines%
for /f "tokens=*" %%a in ('findstr /i "Failed to get registration state. Error" more /e +%startLine% C:\Client.log') do echo %%a

2 个答案:

答案 0 :(得分:1)

@echo off
for /f "tokens=*" %%a in (C:\Client.log) do set "line=%%a"
echo "%line%"|findstr /i /c:"Failed to get registration state. Error" >nul
if errorlevel 1 (
 echo not found
) else (
 echo found
)

line将依次设置为每行的内容。当for循环结束时,它将包含最后一行的内容。然后测试字符串,但由于它包含空格,您需要/c:否则它会在带引号的字符串中找到任何的单词。

[编辑:添加@echo off行,并在管道回显中%line%周围插入引号。]

由于您的目标行似乎包含重定向器,因此需要引号。

我从你的评论中得出结论,你的最后一行可能是

<![LOG[RegTask: Failed to get registration state. Error: 0x8009000b]LOG]!>

令人遗憾的是,您还没有发布示例,没有编辑您的问题以添加您的代码,因此您正在使用的代码的精确布局(这是至关重要的)仍然是一个谜。

答案 1 :(得分:0)

@echo off
setlocal

rem Get the number of last line
for /f %%i in ('find /v /c "" ^< C:\Client.log') do set "lastLine=%%i"

rem Get the number of last line where target string was found
for /f "delims=[]" %%a in ('find /N /i "Failed to get registration state. Error" C:\Client.log') do set "lastFound=%%a"

if "%lastFound%" equ "%lastLine%" echo Run the script
相关问题