我疯了,有人能解释一下为什么$ lastexitcode的价值未定义?
看看我的简单尝试:如果我启动命令dir,我得到正确的输出,所以$ LASTEXITCODE必须为0.
不幸的是,如果我尝试:
$LASTEXITCODE
我没有任何回报价值。 如果我在诸如“diiiiir”之类的命令或类似的不存在之类的命令之前给出它是相同的情况。
答案 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%
玩得开心......