人気ブログランキング | 話題のタグを見る
バッチファイルで直前のコマンドの終了コード判定
バッチファイル書いてて、個々のコマンドが成功したかどうかを確認したいという要件がでました。
で、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
by jehoshaphat | 2009-08-11 08:34 | 豆知識


<< (ニュース)WPAも脆弱性で数... (SQL)SQL Server... >>