2015-04-09 5 views
0

Я новичок в пакетном скриптинге. У меня есть пакетный файл test.bat, в котором я подключаюсь к различным базам данных. Но если возникает ошибка ERROR: ORA-12154 или любая ошибка соединения, она выводит сообщение в командной строке, я хочу отобразить его в файле result.txt. Я попытался ERRORLEVEL, но он всегда показывает тот же ERRORLEVEL вот мой файл Test.bat: -как обрабатывать ошибку sqlplus в пакетном файле

@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 

ответ

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 оценивается как одна команда ev en, если он охватывает несколько строк пакетного скрипта;
  • Редактировать Добавить безусловный echo %%a !xERROR! чтобы увидеть, что ERRORLEVEL поднято фактически;
  • Редактировать добавить ELSE и выполнить логический результат в обоих случаях;
  • использование !xERROR! NEQ 0 состояние, а не !xERROR! EQU 0 как обычно код 0 (false) будет указывать successful completion;
  • edit2sqlplus %%b @D:\batch\mysql.sql 2>> D:\batch\result.txt должен добавить любые sqlplus сообщения об ошибке в файл журнала. Здесь 2 в 2>> является standard error text output handle.
+0

спасибо josef, но он не работает, он всегда печатает сообщение в файле result.txt, даже если есть ошибка в соединении – angel

+0

извините, я хотел сказать, даже если в связи с ошибкой «нет». – angel

+0

Спасибо так многоhhhhh :) – angel