バッチファイル書いてて、個々のコマンドが成功したかどうかを確認したいという要件がでました。
で、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 offcd /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%
参考: