0

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

我有一个外部二进制文件 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,然后从 CLI 运行“echo %errorlevel%”,我可以看到它是 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。这会是个问题吗?

4

2 回答 2

0

您所说的都是正确的:myperl.pl 返回某个错误级别,批处理文件接受它,然后返回适当的错误级别值。问题是这样的:批处理文件,向哪个进程返回它的错误级别?

该方案始终作为父子关系工作:父进程执行子进程并等待它终止,然后父进程可以获取子进程返回的错误级别值。解决您的问题的方法是,如果 external.exe 程序作为子程序执行批处理文件 (cmd.exe)!但是,如果您“无法控制external.exe”,那么就没有办法解决您的问题...

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

于 2014-01-25T03:45:23.077 回答
0

终于找到了根本原因。

myperl.pl 应该带有完整路径,否则 external.exe 不知道 myperl.pl 在哪里。

于 2014-02-03T21:32:56.637 回答