Error handling BAT:解析输出文件以进行错误处理

Error handling BAT:解析输出文件以进行错误处理,error-handling,batch-file,for-loop,Error Handling,Batch File,For Loop,我每天都有一个由计划批处理文件启动的流程。如果出现错误,我需要内置错误处理来重新启动进程。大多数时候都很好,但我每个月都会有一次超时错误,这是不可避免的。进程没有向bat文件输出errorlevel,因此我需要能够解析输出文件以确定进程是否需要重新启动 我尝试使用FOR/F函数将第12行的内容作为变量传递给IF语句,但没有成功。很明显,我可以跳到第12行,但接下来我要处理其余行的标记。有人有什么建议我可以试试吗 一切正常时输出文件: (为了可读性增加了行号) 出现错误时的输出文件: 1 Pri

我每天都有一个由计划批处理文件启动的流程。如果出现错误,我需要内置错误处理来重新启动进程。大多数时候都很好,但我每个月都会有一次超时错误,这是不可避免的。进程没有向bat文件输出errorlevel,因此我需要能够解析输出文件以确定进程是否需要重新启动

我尝试使用
FOR/F
函数将第12行的内容作为变量传递给
IF
语句,但没有成功。很明显,我可以跳到第12行,但接下来我要处理其余行的标记。有人有什么建议我可以试试吗

一切正常时输出文件:

(为了可读性增加了行号)

出现错误时的输出文件:

1  Pricing Script
2  
3  ________________________________________________________________________ 
4 
5  Retrieve Prices
6  
7  Date of price file: 071012
8  Regular only 
9  Connecting to server intdata.com
10 TCP/IP connection established
11 Time Out
12 General Time Out. The User ID and/or Password might be incorrect.

这将仅测试文件第12行的给定字符串:

@echo off
for /f "skip=11 tokens=*" %%i in (your_log_filename) do (
 echo %%i | find "General Time Out" >nul
 goto check
)

:check
if errorlevel 1 (echo No Timeout occured!) else (echo Timeout occured)

我只需使用FIND或FINDSTR在输出中查找错误消息。我不担心电话号码

find "General Time Out. The User ID and/or Password might be incorrect." "yourFile.log" && (
  echo Timeout occurred, you must put code here to restart
)


所以你只需要输出文件中的第12行?这是一种方法,如果我能得到,我应该设置为+1。整洁的但是你怎么知道这是唯一可能的错误消息?@EitanT-我不清楚:)但是只要所有可能的错误消息都已知(或者至少一个不同的片段),那么FINDSTR就可以与多个/C参数一起使用,每个消息一个参数。或者FINDSTR可以与正则表达式一起使用,以匹配某些不同的错误消息模式。
find "General Time Out. The User ID and/or Password might be incorrect." "yourFile.log" && (
  echo Timeout occurred, you must put code here to restart
)
findstr /c:"General Time Out. The User ID and/or Password might be incorrect." "yourFile.log" && (
  echo Timeout occurred, you must put code here to restart
)