Pythonスクリプトをbat経由で実行する際に、戻り値を取りたい場合があります。
その際に、%ERRORLEVEL%を使うというのは有名な話ですが、少々ハマったので、その部分を記載しておきます。
まず、基本形です。
sample.py
import sys
sys.exit(1)
print.bat
@echo off
python sample.py
echo %ERRORLEVEL%
REM 実行結果
REM 1
sample.pyの実行結果が%ERRORLEVEL%
に格納されるので、それを表示するだけの簡単なものです。
しかし、同じpyファイルを使った次のbatコードは上手く動きません。
print.bat
@echo off
python sample.py
cd /d d:\software
echo %ERRORLEVEL%
REM 実行結果
REM 0
気付いてしまえばそれまでなのですが、ERRORLEVEL
は直前に実行されたコマンドの戻り値が入ります。
従って、間に他のコマンドが入ってしまうと、期待した結果が得られないことになります。
これを回避するためには、一旦他の変数に格納して参照するようにすれば良いです。
print.bat
@echo off
python sample.py
SET RESULT=%ERRORLEVEL%
cd /d d:\software
echo %RESULT%
REM 実行結果
REM 1