$ LASTEXITCODE命令后未定义

时间:2013-05-23 19:43:36

标签: powershell powershell-v2.0

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

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

不幸的是,如果我尝试:

$LASTEXITCODE

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

2 个答案:

答案 0 :(得分:8)

$ LASTEXITCODE仅在返回时由可执行文件或批处理文件设置。可以使用$?检查PowerShell命令。有关详细信息,请参阅here

答案 1 :(得分:0)

特别是$ LASTEXITCODE由“Legacy”exectutables设置...它等同于旧的DOS / Windows%ERRORLEVEL%变量。以下是在PowerShell中管理$ LASTEXITCODE的最佳方法:

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

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

exit /b <exitcode>

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

exit /b 2

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

cmd /c "SetLASTEXITCODE.cmd"

输出应为:

exit /b 2

现在测试$ LASTEXITCODE:

$LASTEXITCODE

输出是:

2

注意:在所谓的“Legacy”可执行文件(也包括旧的.com文件)上,如果开发人员/程序员没有从编写exe的任何编程语言(通常通过API调用)设置ERRORLEVEL,那么ERRORLEVEL / LASTEXITCODE将不会被设置!我曾经在80年代早期用这种方式写回来,然后在internal commands和你的“dir”示例之间有区别,后者没有设置ERRORLEVEL和(.com)或exe文件中的外部命令 - 早就忘记了细节。

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

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

玩得开心......