Windows批处理:如何解析日志中的错误消息,然后执行命令

时间:2017-05-16 16:10:59

标签: windows batch-file

我在错误日志中出现以下错误消息,并且如果找到了服务,则希望重新启动服务。

java.io.UTFDataFormatException:无效的UTF8编码。

有人可以为此编写逻辑吗?

所以#1,需要逻辑来设置变量到这个错误消息,如果找到,然后#2重命名日志(假设它是test.log,重命名为test_05162017.log)带时间戳,然后#3写一个IF语句,如果存在,请在\ machine上重新启动服务。

到目前为止,我有......

:Parse Log
@ECHO ON
SETLOCAL
SET "sourcedir=C:\tEST"
FOR /f "delims=" %%a IN ('dir /b /a-d /od "%sourcedir%\Test*.log" ') DO 
SET "filelog=%sourcedir%\%%a"
FOR /f "usebackqtokens=2 delims=:" %%a IN ("%filelog%") DO SET job=%%a

If "%job%" == " Invalid UTF8 encoding" (
    echo Found Error > err.log
) else (
    exit
)

谢谢!

1 个答案:

答案 0 :(得分:0)

这里有两个选项,两者都应输出包含与err.log匹配的任何文件的路径。

第一个使用内置findstr.exe

@FINDSTR/MILC:"Invalid UTF8 encoding" "C:\tEST\Test*.cmd">"Err.log"
@For %%A In ("Err.log") Do @If "%%~zA"=="0" @Del "%%A"

第二个使用find.exe,作为替代方案,以及findstr.exe读取unicode文件的潜在错误:

@ECHO OFF
>"Err.log" (FOR /F "TOKENS=* DELIMS=- " %%A IN (
    'FIND /I /C "Invalid UTF8 encoding" "C:\tEST\Test*.cmd"'
) DO FOR /F "TOKENS=1-3 DELIMS=:" %%B In ("%%A") DO IF %%D GTR 0 ECHO=%%B:%%C)
FOR %%A IN ("Err.log") DO IF "%%~zA"=="0" DEL "%%A"

请注意,所写的find.exe版本仅适用于完整的源文件规范。