我在错误日志中出现以下错误消息,并且如果找到了服务,则希望重新启动服务。
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
)
谢谢!
答案 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
版本仅适用于完整的源文件规范。