【问题标题】:batch file call errorlevel twice批处理文件调用错误级别两次
【发布时间】:2014-01-25 01:52:53
【问题描述】:

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

我有一个外部二进制文件 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。这会是个问题吗?

【问题讨论】:

    标签: perl batch-file return errorlevel


    【解决方案1】:

    你说的都是对的:myperl.pl 返回某个错误级别,批处理文件接受它,然后返回适当的错误级别值。问题是这样的:批处理文件,什么进程返回它的错误级别?

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

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

    【讨论】:

    • 谢谢@Aacini。文档说“external.exe 读取 mybatch.cmd 的返回值,0-成功,其他-失败”。如果我在批处理文件中手动将返回码设置为 0 或 1,例如“set result=0”,然后“exit %result%”,external.exe 按预期运行。问题是我需要在 perl 文件中设置值,而不是批处理文件。
    【解决方案2】:

    终于找到了根本原因。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 2023-03-16
      • 2021-04-05
      • 2010-11-12
      相关资源
      最近更新 更多