Batchfile中的ExitCode很奇怪

时间:2018-05-24 09:42:31

标签: powershell batch-file exit-code start-process

我尝试从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:\

我将始终获取exitCode" 0",因为CD命令每次都有效。所以即使目录存在并且它会在cmd中给我一个错误,exitCode中也没有错误。有没有办法在使用powershell的批处理文件的运行时检查是否有任何错误,或者我是否必须以一旦出现错误并立即取消错误exitCode取消它的方式编写我的批处理文件?

感谢您提供任何帮助或建议!

1 个答案:

答案 0 :(得分:2)

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

例如,您的powershell示例只是启动批处理,等待它完成并回显您批量退出的最后 errorlevel,尽管在此期间您可能有许多不同的错误级别正在运行的脚本。

如果您的批处理内部处理错误,如下例所示,您可以使用它执行某些操作:

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