【问题标题】:How to get windows returncode withi a batch file如何在批处理文件中获取 Windows 返回码
【发布时间】:2016-02-17 10:36:35
【问题描述】:

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

use Modern::Perl '2015';

exit 1;

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

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

输出为“ERRORLEVEL 错误脚本:0”

我已经尝试过 cmd 的“开始/等待 ...”,但在这里我看到了第二个控制台窗口,我必须手动关闭它。这不是我想要的。

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

【问题讨论】:

  • call C:\Strawberry32\portableshell.bat C:\Users\abc\error.pl怎么样
  • 太棒了,这就是我想要的方式

标签: windows batch-file return-code


【解决方案1】:

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

1- 在您的 Windows 批处理文件中插入 与在 C:\Strawberry32\portableshell.bat 文件中“调用 perl 脚本”相同的命令。这肯定会允许从 perl 脚本访问错误级别。

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

exit /B %errorlevel%

上一行的目的是将perl脚本中的错误级别返回给调用这个批处理文件的批处理文件。只要通过call命令调用此批处理文件,此机制就可以完美运行:

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

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

如果portableshell.bat 文件是通过cmd /c 而不是call 调用的,那么您必须通过一个普通的exit 命令设置返回的错误级别cmd.exe 程序,使用NO /B开关:

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

exit %errorlevel%

您可以在What are the ERRORLEVEL values set by internal cmd.exe commands? 阅读有关错误级别内容的进一步说明以及exit /B numberexit number 的区别。在那个网站上你可能会读到start /B /WAIT portableshell.bat 命令也可以用来解决这个问题,但是这种方法也需要像cmd /c 方法一样以exit %errorlevel% 结束.bat 文件。

【讨论】:

    猜你喜欢
    • 2014-12-31
    • 2012-10-24
    • 2021-01-16
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多