$lastexitcode の値が定義されていない理由を誰か説明してくれませんか?
私の簡単な試みを見てください。コマンド dir を起動すると、正しい出力が得られるため、$LASTEXITCODE は 0 でなければなりません。
残念ながら、私が試してみると:
$LASTEXITCODE
戻り値はありません。「diiiir」など、存在しない類似のコマンドの前に与えた場合も同じ状況です。
$lastexitcode の値が定義されていない理由を誰か説明してくれませんか?
私の簡単な試みを見てください。コマンド dir を起動すると、正しい出力が得られるため、$LASTEXITCODE は 0 でなければなりません。
残念ながら、私が試してみると:
$LASTEXITCODE
戻り値はありません。「diiiir」など、存在しない類似のコマンドの前に与えた場合も同じ状況です。
$LASTEXITCODE は、実行可能ファイルまたはバッチ ファイルが返されたときにのみ設定されます。PowerShell コマンドは $? で確認できます。詳しくはこちらをご覧ください。
特に、$LASTEXITCODE は「レガシー」実行可能ファイルによって設定されます...これは、古い 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
注: いわゆる「レガシー」実行可能ファイル (古い .com ファイルも含まれます) で、開発者/プログラマーが exe が記述されたプログラミング言語から ERRORLEVEL を設定しなかった場合 (通常は API 呼び出しを介して)、ERRORLEVEL/LASTEXITCODE設定されません!私は80年代初頭にこれらの方法を書いていましたが、当時はERRORLEVELを設定しない「dir」の例のような内部コマンドと(.com)またはexeファイルの外部コマンドとの間に区別がありました-長い間忘れられていました詳細。
最後の例...コマンドファイルを変更して以下を含め、上記のテストを繰り返します...コマンドファイル内の両方のERRORLEVELを設定し、$ LASTEXITCODEを設定して%ERRORLEVEL%で終了します...
cmd /c "exit /b 2"
echo %ERRORLEVEL%
exit /b %ERRORLEVEL%
楽しむ...