使用errorlevel查找错误的问题

时间:2014-06-26 08:08:55

标签: batch-file errorlevel

我在批处理工作中遇到错误问题。我目前每天运行50个批处理操作,带有一个日志文件,告诉我批处理工作是否成功完成。 上周我发现了一些错误,而且现在,我没有任何控件显示或只是告诉我批处理失败是否有错误。 我的批处理通过sqlplus启动脚本。 我尝试过使用errorlevel,但是id没有工作。

到目前为止,我的batchjob看起来像这样。 我已经包含了我尝试使用的错误级别代码。

@Echo Off
@For /F "tokens=1,2,3,4 delims=-/ " %%A in ('Date /t') do @(
Set Day=%%A
Set Month=%%B
Set Year=%%C
Set All=%%A-%%B-%%C
)
@For /F "tokens=1,2,3 delims=:,. " %%A in ('echo %time%') do @(
Set Hour=%%A
Set Min=%%B
Set Sec=%%C
Set Allm=%%A.%%B.%%C
)
@For /F "tokens=3 delims=: " %%A in ('time /t ') do @(
Set AMPM=%%A
@Echo On
)
echo Start: %date% %time%    >> ..\log\Scriptname_%All%_%Allm%.log
sqlplus "Script" >> ..\log\Scriptname_%All%_%Allm%.log
IF %errorlevel% NEQ 0 GOTO :Error
GOTO :Success
:error
echo There was an error.
echo Stop: %date% %time%    >> ..\log\Scriptname_%All%_%Allm%.log
EXIT 1
:end
echo Success.
echo Stop: %date% %time%    >> ..\log\Scriptname_%All%_%Allm%.log
EXIT 0

2 个答案:

答案 0 :(得分:0)

我认为sqlplus dosn默认返回错误代码,因此总是返回0.

此线程中描述了一些更改此选项的选项:

Sql*plus always returns exit code 0?

另一种方法是捕获输出并解析它以检测错误。

答案 1 :(得分:0)

您的批处理文件看起来很好。问题很可能出在SQL * PLUS脚本上。

如果SQL * PLUS脚本中发生错误,则默认情况下SQL * PLUS不会返回错误。您可以在SQL * PLUS脚本中使用WHENEVER SQLERRORWHENEVER OSERROR来强制在出错时使用非零错误代码终止。

whenever sqlerror exit failure
whenever oserror exit failure

有各种选项可以更好地控制返回的代码,并控制事务行为(提交或回滚)。点击链接获取更多信息。