5

我快疯了,有人能解释一下为什么 $lastexitcode 的值是未定义的吗?

看看我的简单尝试:如果我启动命令 dir,我会得到正确的输出,所以 $LASTEXITCODE 必须为 0。

不幸的是,如果我尝试:

$LASTEXITCODE

我没有任何返回值。如果我在“diiiiir”之类的命令或不存在的类似命令之前给出相同的情况。

4

2 回答 2

9

$LASTEXITCODE 仅在可执行文件或批处理文件返回时设置。可以使用 $? 检查 PowerShell 命令。请参阅此处了解更多信息。

于 2013-05-23T20:05:06.010 回答
1

特别是 $LASTEXITCODE 由“旧版”可执行文件设置......它相当于旧的 DOS/Windows %ERRORLEVEL% 变量。这是在 PowerShell 中管理 $LASTEXITCODE 的最佳方式:

cmd /c "exit 0" #Reset $LASTEXITCODE between runs while debugging

当从 PowerShell 调用时,批处理 (.bat)/命令 (.cmd) 文件将设置它:

exit /b <exitcode>

例如,使用以下行创建一个名为 SetLASTEXITCODE.cmd 的命令文件:

exit /b 2

然后,从 PowerShell 调用命令文件:

cmd /c "SetLASTEXITCODE.cmd"

输出应该是:

exit /b 2

现在测试 $LASTEXITCODE:

$LASTEXITCODE

输出是:

2

注意:在所谓的“传统”可执行文件(也包括旧的 .com 文件)上,如果开发人员/程序员没有从任何编写 exe 的编程语言(通常通过 API 调用)设置 ERRORLEVEL,那么 ERRORLEVEL/LASTEXITCODE不会设置!我曾经在 80 年代初写过这些方式,当时内部命令(如您的 'dir' 示例(它没有设置 ERRORLEVEL)和(.com)或 exe 文件中的外部命令之间存在区别——早已被遗忘细节。

最后一个示例...修改命令文件以包含以下内容并重复上述测试...它在命令文件中设置 ERRORLEVEL 并以 %ERRORLEVEL% 设置 $LASTEXITCODE 退出...

cmd /c "exit /b 2"
echo %ERRORLEVEL%
exit /b %ERRORLEVEL%

玩得开心...

于 2016-09-08T23:22:33.597 回答