我有一个调用批处理文件的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
答案 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)
are broken,退出%errorlevel%将设置批处理文件的退出代码,但不会设置进程!
@echo off
set err=3010
@%COMSPEC% /C exit %err% >nul
这会将进程的退出代码(可能是cmd.exe)设置为3010.