如何使用批处理文件获取Windows返回码

时间:2016-02-17 10:36:35

标签: windows batch-file return-code

我有一些由Windows批处理调用的perl脚本。 perl脚本提供了我需要输出的返回码,但我得到0。 即使使用绝对减少的perl脚本:

use Modern::Perl '2015';

exit 1;

我得到0 als ERRORLEVEL。 这是我的Windows批处理文件的一部分,我在其中调用perl脚本:

cmd /c "C:\Strawberry32\portableshell.bat C:\Users\abc\error.pl"
echo ERRORLEVEL Error Script: %ERRORLEVEL%

输出为" ERRORLEVEL错误脚本:0"

我已经尝试了#34;开始/等待......"在cmd,但在这里我看到第二个控制台窗口,我必须manualy关闭。那不是我想要的。

如果我输入" C:\ Strawberry32 \ portableshell.bat C:\ Users \ abc \ error.pl"在konsole窗口中手动,我看到/获得预期的Errorlevel 1,这里有什么问题?

1 个答案:

答案 0 :(得分:0)

这里有几点。首先,您没有向我们展示您调用perl脚本"的代码,但是您调用portableshell.bat文件的代码,并且您没有向我们展示此类批处理文件。因此,解决问题的第一个也是最简单的方法是:

1 - 在您的Windows批处理文件中插入您使用的相同命令"调用perl脚本"在C:\Strawberry32\portableshell.bat文件中。这将确保从perl脚本访问errorlevel。

我假设portableshell.bat文件的内容基本上是两行:运行perl脚本后跟这行的那一行:

exit /B %errorlevel%

上一行的目的是将错误级别从perl脚本返回到调用这个批处理文件的批处理文件。只要通过 call 命令 调用此批处理文件,此机制就可以正常工作:

2 - 通过C:\Strawberry32\portableshell.bat命令调用call文件:

call C:\Strawberry32\portableshell.bat C:\Users\abc\error.pl

如果portableshell.bat文件是通过cmd /c而不是call调用的,那么您必须通过plain {设置cmd.exe程序返回错误级别 {1}}命令,无exit开关:

3 - 通过/B行调用C:\Strawberry32\portableshell.bat文件,但使用此命令终止它:

cmd /c

您可以在What are the ERRORLEVEL values set by internal cmd.exe commands?阅读有关错误级别内容以及exit %errorlevel% exit /B number之间差异的进一步说明。在该站点,您可能会读到exit number命令也可能用于解决此问题,但此方法还需要使用start /B /WAIT portableshell.bat以与exit %errorlevel%相同的方式结束.bat文件方法。