我有一个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模数256 = 194
发布于 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位返回值。
发布于 2011-02-26 00:15:12
Exit codes在批处理文件are broken中,退出%errorlevel%将设置批处理文件的退出代码,但不会设置进程的退出代码!
@echo off
set err=3010
@%COMSPEC% /C exit %err% >nul这会将进程(可能是cmd.exe)的退出代码设置为3010。
https://stackoverflow.com/questions/5116018
复制相似问题