从批处理文件中退出代码很奇怪

ExitCode from Batchfile is weird

我正在尝试从 powershell 脚本 运行 一个批处理文件,并检查 运行 时间内是否有任何错误。

现在,我正在通过以下代码进行操作:

$job = Start-Process -FilePath "C:\Test\Testfile_2.bat" -Wait -passthru;
$job.ExitCode

这行得通……或者至少,差不多。

虽然我得到了 exitCode,但它实际上只提供了有关批处理文件的最后一个命令 运行 的信息。让我解释一下。

如果我在批处理文件中执行以下操作:

MKDIR C:\Test\Testdir

如果我 运行 这个,我会在第一次 运行 它时得到 exitCode “0”,对于以下所有 运行 我得到“1”,因为该目录已经存在。但是如果我在批处理文件的末尾添加一张简单的 CD:

MKDIR C:\Test\Testdir
CD C:\

我会总是得到退出代码“0”,因为 CD 命令每次都有效。因此,即使目录存在并且它会在 cmd 中给我一个错误,exitCode 中也没有错误。有没有一种方法可以使用 powershell 检查批处理文件 运行 期间是否有任何错误,或者我是否必须按照一旦出现错误立即取消并立即 returns 取消的方式对我的批处理文件进行编码错误退出代码?

感谢您的帮助或建议!

为了让外部程序(例如您的 powershell 命令)知道在批处理脚本运行时发生了什么 运行,您需要将其实际编写到您的批处理文件中以确定什么应该在某些错误期间发生。

例如,您的 powershell 示例只是启动批处理,等待它完成并回显 last errorlevel,您在批处理退出时使用它,尽管您可能在脚本 运行.

期间有许多不同的错误级别

如果您的批处理在内部处理错误,如下例所示,您可以使用它做一些事情:

....
ping google.ca >nul
if %errorlevel% neq 0 (
exit /b %errorlevel%
) else (
....