3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

バッチファイルで直前のコマンドの終了コード判定

バッチファイル書いてて、個々のコマンドが成功したかどうかを確認したいという要件がでました。

で、Linux$? に当たるものはないのかと探したらありました。

環境変数%ERRORLEVEL% に直前のコマンドの終了コードが格納されてるっぽいです。

ということで、下記のようにIF 文と組み合わせれば終了コードを判定することができるようです。

@echo off

cd /d %~dp0

 

echo ファイルコピ...

xcopy a.txt %temp% /y

 

if not "%ERRORLEVEL%" == "0" (

echo 失敗したよん

PAUSE

EXIT

) else (

echo 成功したよん

PAUSE

)

通常 0 が正常というのもLinuxと同じですね。

まだまだバッチファイルは苦手な3流PGです。

参考:

バッチファイル

碧落 - 知られざるバッチファイル

追記(2010/9/20)

バッチファイルで任意の終了コードを返すには、EXIT の後に終了コードを指定すればいいようです。(1-255までの指定が可能なようです。)

EXIT 1

なので、バッチファイルが外部から呼び出されて、その呼び出し元にバッチファイル内のコマンドのエラーコードを直接返すことも可能です。

例えば下記のような感じです。

rem @echo off

cd /d %~dp0

 

rem フォルダ作成(引数にユーザ名が入ってくること!)

md "\\filesv\test\a"

if not "%ERRORLEVEL%" == "0" GOTO ERR

rem アクセス権設定

cacls.exe "\\filesv\test\a" /E /T /P "hogehoge":R

if not "%ERRORLEVEL%" == "0" GOTO ERR

rem 問題なければ正常終了とする

EXIT 0

 

rem 異常時は問題の有ったコマンドの終了コードを呼び出し元に返す

:ERR

EXIT %ERRORLEVEL%

参考:

EXIT - 現在のプロセス(COMMAND.COMまたはCMD.EXEまたはバッチファイル)の終了

exit - Windowsコマンド集:ITpro