DOS批处理文件中的Perl脚本返回值

标签 perl error-handling batch-file exit-code

我有一个调用 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 却很糟糕!)。该问题可能是由于批处理文件处理变量扩展的方式而出现的。这里有一些值得尝试的事情:

  1. 将以下行添加到批处理脚本的顶部(我通常将其放在顶部,就在我的 @echo off 行下方):setlocalenabledelayedexpansion<
  2. 将所有 %ERRORLEVEL% 引用更改为 !ERRORLEVEL!(用感叹号代替百分号)。

这些更改将导致变量在执行时而不是在解析时扩展。我发现在不使用延迟扩展选项时 %ERRORLEVEL% 值会被破坏。阅读此EnableDelayedExpansion information page了解更多。

关于DOS批处理文件中的Perl脚本返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14488070/

相关文章:

mysql - Perl mysql,为什么这个fetchrow_array 不起作用?

perl - grep 3 最新出现的内容以及该出现周围的一些行

windows - 如何读取批处理文件中驱动器或卷的标签?

csv - 批处理 for 循环、csv 解析和正确输出到文件的问题

batch-file - 使用 ping.exe 的 ERRORLEVEL 测试 IP 可达性

regex - 从正则表达式匹配中捕获单词

regex - perl中用-e和正则表达式匹配的文件名

vb.net - 尝试多种捕获行为

iis - asp.net以斜杠结尾的无效路径不会返回错误页面IIS

javascript - 无法第二次在React Js上运行示例应用程序