批处理文件调用错误级别两次

时间:2014-01-25 01:52:53

标签: perl batch-file return errorlevel

我在批处理文件错误级别返回问题上苦苦挣扎,但找不到答案 任何人都可以给我任何提示吗?

我有一个外部二进制文件,external.exe读取批处理文件的返回代码(0成功,其他失败)以决定该怎么做。

在批处理文件mybatch.cmd中,我想运行一个脚本(perl)并将结果返回到批处理文件。

例如, mybatch.cmd

@echo off
myperl.pl
exit %errorlevel%

myperl.pl 是:

#!perl.exe
exit 0;

所以我希望myperl.pl将值0返回到批处理文件,然后批处理文件将0返回到external.exe文件。

但是external.exe没有按预期工作。

1)如果我从CLI运行mybatch.cmd,然后" echo%errorlevel%"从CLI,我可以看到它是0。

2)如果我添加一行来显示myperl.pl的返回代码,我可以看到myperl.pl的返回代码正好是0。

例如:

@echo off
myperl.pl
echo %errorlevel%
REM exit %errorlevel%

它将显示0,因此perl脚本将完全返回该值。

3)如果我添加一行来手动将返回代码设置为0,则external.exe可以正常工作。

@echo off
myperl.pl
result=0
exit %result%

这真的很奇怪。有任何想法吗?我无法控制external.exe,所以我无法对其进行调试。

在此示例中,%errorlevel%被调用两次:
1)从myperl.pl返回批处理 2)从mybatch.cmd返回到external.exe。这会是一个问题吗?

2 个答案:

答案 0 :(得分:0)

你所说的都是对的:myperl.pl返回一个错误级别,批处理文件接受它,然后它返回相应的errorlevel值。问题是:批处理文件,什么进程返回错误级别?

此方案始终作为父子关系:父进程执行子进程并等待终止,然后父进程可以获取子进程返回的errorlevel值。解决问题的方法是,如果external.exe程序作为子项执行批处理文件(cmd.exe)!但是,如果您“无法控制external.exe”,则无法解决您的问题......

你怎么知道external.exe程序“读取批处理文件的返回代码(0-成功,其他失败)来决定做什么”?我认为你现在感到困惑。

答案 1 :(得分:0)

最终找到根本原因。

myperl.pl应该带有完整路径,否则external.exe不知道myperl.pl的位置。