首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕获从Perl中的批处理文件返回的错误代码

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

Stack Overflow用户
提问于 2011-02-25 18:16:44
回答 2查看 1.9K关注 0票数 2

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

Main.pl

代码语言:javascript
复制
system ("Installer.bat");
print "Error code is $? \n";

Installer.bat

代码语言:javascript
复制
@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模数256 = 194

EN

回答 2

Stack Overflow用户

发布于 2011-02-25 22:51:56

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

在IPC::System::Simple v0.06中,当使用多个参数调用run子例程时,它将在Win32系统上提供完整的32位退出值。这不同于以前版本的IPC::System::Simple,也不同于Perl的内置system()函数,后者只能处理8位返回值。

票数 3
EN

Stack Overflow用户

发布于 2011-02-26 00:15:12

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

代码语言:javascript
复制
@echo off
set err=3010
@%COMSPEC% /C exit %err% >nul

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5116018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档