如何在批处理文件中处理sqlplus错误

时间:2015-04-09 06:37:21

标签: batch-file

我是批处理脚本的新手.. 我有test.bat批处理文件,我在其中连接到不同的数据库。但是如果出现ERROR:ORA-12154或任何连接错误,它会在命令提示符下显示消息,我想将它显示在result.txt文件中。我试过ERRORLEVEL,但它总是显示相同的ERRORLEVEL这里是我的test.bat: -

@ECHO On
setlocal enabledelayedexpansion

for /f "delims== tokens=1,2" %%a in (D:\batch\InstallList.txt) do (
sqlplus %%b @D:\batch\mysql.sql
IF %ERRORLEVEL% EQU 0 ECHO CONNECTION ERROR IN %%a >> D:\batch\\result.txt
) 
pause;

但它不起作用; ERRORLEVEL对于所有数据库保持相同。 在InstallList.txt

db1=username/password
db2=username/password
db3=username/password

1 个答案:

答案 0 :(得分:0)

使用EnableDelayedExpansion尝试下一种方法:

setlocal enabledelayedexpansion

for /f "delims== tokens=1,2" %%a in (D:\batch\InstallList.txt) do (
    sqlplus %%b @D:\batch\mysql.sql 2>>  D:\batch\result.txt
    set "xERROR=!ERRORLEVEL!"
    echo %%a !xERROR!
    if !xERROR! NEQ 0 (
        ECHO CONNECTION ERROR !xERROR! IN %%a >> D:\batch\result.txt
    ) else (
        ECHO CONNECTED WITH NO ERROR ^(!xERROR!^) IN %%a >> D:\batch\result.txt
    )
) 
pause

说明:

  • 使用!ERRORLEVEL!而不是%ERRORLEVEL%强制在执行时而不是在解析时扩展ERRORLEVEL变量:通常整个FOR循环被评估为单个命令如果它跨越批处理脚本的多行;
  • 修改添加无条件echo %%a !xERROR!以查看事实上提出的ERRORLEVEL;
  • 编辑添加ELSE并在两种情况下记录结果;
  • 使用!xERROR! NEQ 0条件而不是!xERROR! EQU 0,因为通常代码0(false)将表示successful completion;
  • edit2 sqlplus %%b @D:\batch\mysql.sql 2>> D:\batch\result.txt应将任何sqlplus错误消息附加到日志文件中。 2中的2>>standard error text output handle