捕获从Perl中的批处理文件返回的错误代码

时间:2011-02-25 10:16:44

标签: perl batch-file

我有一个调用批处理文件的perl文件来安装第三方程序。

Main.pl

system ("Installer.bat");
print "Error code is $? \n";

Installer.bat

@echo off
installer.exe
echo errorlevel is %errorlevel% > logfile
exit %errorlevel%

批处理文件返回错误代码3010,表明需要重新启动。 但是,perl模块打印49664.我认为应该打印3010.有人可以解释一下这是如何工作的吗?我想获取我的perl代码中所需的重新启动的错误代码,然后执行一些清理工作并从perl模块重新启动计算机。

以下相关要点也不清楚。 - Windows批处理文件只有255个错误代码,那么如何将3010作为错误代码返回? - This place建议我们需要将错误代码右移8位以获取本机错误代码。因此,如果我将49664右移8,我得到194(仍然与3010不同)。但是我也注意到3010 Mod 256 = 194

2 个答案:

答案 0 :(得分:3)

http://search.cpan.org/perldoc?IPC::System::Simple

从IPC :: System :: Simple v0.06开始,使用多个参数调用时的run子例程将在Win32系统上提供完整的32位退出值。这与以前版本的IPC :: System :: Simple和Perl的in-build system()函数不同,后者只能处理8位返回值。

答案 1 :(得分:0)

批处理文件Exit codes中的

are broken,退出%errorlevel%将设置批处理文件的退出代码,但不会设置进程!

@echo off
set err=3010
@%COMSPEC% /C exit %err% >nul

这会将进程的退出代码(可能是cmd.exe)设置为3010.

相关问题