たとえば、バッチファイルで、次のコマンドを入力しました。
xcopy C:\ fileA.txt D:\ Dir \ / y / d
fileA.txtというファイルがない場合は、絶対に失敗します。しかし、失敗したかどうかを知りたいので、ユーザーにいくつかのメッセージを出力します。これどうやってするの?
どんな助けでも感謝するでしょう、ありがとう!
たとえば、バッチファイルで、次のコマンドを入力しました。
xcopy C:\ fileA.txt D:\ Dir \ / y / d
fileA.txtというファイルがない場合は、絶対に失敗します。しかし、失敗したかどうかを知りたいので、ユーザーにいくつかのメッセージを出力します。これどうやってするの?
どんな助けでも感謝するでしょう、ありがとう!
ほとんどのコマンド/プログラムは、成功すると0を返し、エラーを通知するためにerrorlevelと呼ばれる他の値を返します。
たとえば、バッチでこれを確認できます。
if not errorlevel 0 goto ERR
xcopyエラーレベル:
0-すべてのファイルがエラーなしでコピーされました
1-コピーするファイルが見つかりませんでした(無効なソース)
2-コピーが完了する前にXCOPYがCtrl-Cで終了しました
4-初期化エラーが発生しました。
5-ディスク書き込みエラーが発生しました。
[1] http://m.computing.net/answers/dos/xcopy-errorlevels/7510.html
あなたが興味を持っているのは「エラーレベル」だと思います。http://www.robvanderwoude.com/errorlevel.phpを参照してください。基本的に、バッチファイルでは、次のように言うことでコマンドのステータスコード(UnixまたはLinuxと同様)を確認できます。
IF ERRORLEVEL 1 <do something>
IF ERRORLEVEL 2 <do something>
ここで、1と2は、最後に実行されたプログラムによって返されるステータスコードの可能な値です。次のようなこともできます
echo %ERRORLEVEL%
ステータスコードを出力しますが、常に「通常の」環境変数のように動作するとは限らないことに注意してください。違いの1つは、「set」コマンドでは表示されないことです。
受け入れられた答えが機能しなかったことがわかりましたが、これは機能しました:
if %ERRORLEVEL% neq 0 goto ERR
次の構造を使用するだけです。
command > nul 2> nul && (
echo Success
REM can be multi line
) || (
echo Error
REM can be multi line
)