我是批处理脚本的新手.. 我有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
答案 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; sqlplus %%b @D:\batch\mysql.sql 2>> D:\batch\result.txt
应将任何sqlplus
错误消息附加到日志文件中。 2
中的2>>
是standard error text output handle。