【发布时间】:2018-05-24 09:42:30
【问题描述】:
我正在尝试从 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 的方式对批处理文件进行编码?
感谢您的帮助或建议!
【问题讨论】:
-
为什么不在 PowerShell 中编写整个内容?这样,您将获得更好的错误通知等。
-
只是因为您要求提供批处理文件退出的最后一个退出代码。
-
这里的批处理文件只是一个例子。我尝试运行的批处理文件是一个包含大约 3000 行代码的自动化脚本,powershell 无法轻易替换它。
-
@GerhardBarnard 是的,我知道我要求这个,我知道为什么我得到这个“0”。这就是为什么我要问是否有办法在运行时检查错误,而不是检查 exitCode。
-
在PowerShell中重写3000行批处理脚本肯定比调整3000行批处理脚本返回的退出代码更容易。
标签: powershell batch-file exit-code start-process