命令后$LASTEXITCODE 未定义

问题描述 投票:0回答:2

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

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

不幸的是,如果我尝试:

$LASTEXITCODE

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

powershell powershell-2.0
2个回答
9
投票

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


2
投票

特别是 $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”示例,它不会在(.com)或 exe 文件中设置 ERRORLEVEL 和外部命令 - 一个很长的命令因为忘记了细节。

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

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

玩得开心...

© www.soinside.com 2019 - 2024. All rights reserved.