我有一个调用 Perl 脚本文件的 DOS 批处理文件:
ssutexec.pl prog=MyProg I_CARD=MyCard O_F071=ME007 F70P=MYF70P TRIG=MYTRIG
set status=%errorlevel%
if NOT %status% == 0 (
echo *******************************************************
echo MPSBM070 JOB stopped with a RETURN CODE of %status%
echo ************** END OF JOB *****************************
goto JobEnd
)
在 ssutexec.pl perl 脚本文件内,执行错误条件并且脚本通过 exit($status) 退出:
if ($status != 0)
{
system("ssutdttm.pl SSUTEXEC \"finished processing $prog_nam (Abnormal End) on\"") ;
print "******************************************************************" ;
print " JOB STOPPED - Due to Return code of ($status)" ;
print "*****************END OF JOB***************************************" ;
system("ssutdttm.pl SSUTEXEC \"finished processing $prog_nam (Abnormal End) on\"") ;
system("ssuttmdr.pl -c -b $starttime -m \"$prog_nam\"") ;
exit($status) ;
}
我不是 Perl 脚本专家。 Errorlevel 没有被触发,所以我没有收到错误。如何在 DOS 批处理文件中捕获 perl 脚本退出代码的值?
包括编辑: 新的批处理文件如下所示:
@echo off
setlocal enabledelayedexpansion
if not defined run_env goto ScriptExit
echo ******************************************************************
echo * MYPROG *
echo ******************************************************************
perl ssutdttm.pl MYPROG Start -
perl ssutexec.pl prog=MyProg I_CARD=MyCard O_F071=ME007 F70P=MYF70P TRIG=MYTRIG
set status=!errorlevel!
if NOT %status% == 0 (
echo *******************************************************
echo MYPROG JOB stopped with a RETURN CODE of %status%
echo ************** END OF JOB *****************************
goto JobEnd
)
:JobEnd
if %status% == 0 (
echo *******************************************************
echo NORMAL END OF JOB - RETURN CODE of %status%
echo ******** NORMAL END OF JOB ****************************
) ELSE (
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
echo ABNORMAL END OF JOB - RETURN CODE of %status%
echo !!!!!! ABNORMAL END OF JOB !!!!!!!!!!!!!!!!!!!!!!!!!!!!
)
ssutdttm.pl MYPROG end -
exit /b %status%
::
:ScriptExit
echo run_env: %run_env%
最佳答案
使用批处理文件确实很痛苦(DOS 批处理文件使 bash 脚本看起来很棒,而 bash 却很糟糕!)。该问题可能是由于批处理文件处理变量扩展的方式而出现的。这里有一些值得尝试的事情:
- 将以下行添加到批处理脚本的顶部(我通常将其放在顶部,就在我的
@echo off
行下方):setlocalenabledelayedexpansion
< - 将所有
%ERRORLEVEL%
引用更改为!ERRORLEVEL!
(用感叹号代替百分号)。
这些更改将导致变量在执行时而不是在解析时扩展。我发现在不使用延迟扩展选项时 %ERRORLEVEL%
值会被破坏。阅读此EnableDelayedExpansion information page了解更多。
关于DOS批处理文件中的Perl脚本返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14488070/