我正在尝试从perl脚本运行批处理文件,但我无法处理批处理文件的返回。下面是我的代码
perl脚本:
// call a batch file
my $output =system("D:\\WORKSPACE\\CC_Triggers\\batch_file.bat");
// based on output check the status of the batch file
if($output==0){
print "success in trigger**********";
}
else
{
print "FAilure**********";
}
批处理文件:
set "java_output="
setlocal enableDelayedExpansion
//this will call a java program and get return value.
for /f "delims=" %%J in ('java -cp "PMDfileRead.jar;jxl.jar" PMDfileRead') do (
set "java_output=!java_output! %%J"
)
endlocal & set java_output=%java_output%
// check the ouput of java and act accordingly
IF %java_output% == 1 (
echo failed
exit(1);
)else (
echo succeeded
)
基本上我正在尝试验证xls文件并从java代码返回标志,这是由批处理文件调用的,而且我需要返回到我无法获得的perl脚本。在成功和失败的情况下,由于输出成功,我输出为“0”。请求更正我的代码或建议我处理此问题的最佳方法。
答案 0 :(得分:0)
用反引号替换你的system()调用:
system()包装调用返回命令的退出状态,而使用``返回实际的STDOUT(即你的echo语句)
欲了解更多信息: What's the difference between Perl's backticks, system, and exec?
即: my $ output =`D:\ WORKSPACE \ CC_Triggers \ batch_file.bat`;
答案 1 :(得分:0)
编辑:对不起,我以某种方式读过mpapec发表的评论,说明同样的事情。
Perl部分很好。如果您总是得到0
,则必须是批处理脚本。或者Java。
如果你想检查Perl中的返回值除了它是否为0之外的任何东西,那么你必须将它向右移8位。
my $output = (system("D:\\WORKSPACE\\CC_Triggers\\batch_file.bat")) >> 8;
但是因为你只检查是否为零,这不应该是一个问题。
编辑: 在使用Windows时,永远不要定义环境变量ERRORLEVEL,因为它会与应用程序返回的实际退出代码混淆。这在这里有更详细的解释:How do I get the application exit code from a Windows command line?