Programming Field

|| (論理和) - DOS コマンド一覧

スポンサーリンク

[Windows NT 系] 左のコマンドの実行に失敗したときに右のコマンドが実行されます。

構文

<command1> || <command2>

解説

厳密には、「||」の左側で指定したコマンドラインの終了コード(Errorlevel)が0でないときに右側で指定したコマンドラインが実行されます。終了コードが0のときは右側のコマンドは実行されません。

C言語などでは「||」の左側が0でないとき(真のとき)には右側は実行されません(ショートサーキット)。コマンドプロンプトでの「||」でもこれは同様ですが、終了コードは一般的に「0」が「正常終了」を表すため、終了コードが0のときに「真である」と考えて「0のときは右側を実行しない」という流れとなります。

注意点として、いずれか、または両方のコマンドラインの中に環境変数を用いるとすべてのコマンドが実行される前に環境変数が展開されます(これはIfForで括弧を使った時も同様です)。そのため、

hoge.exe || echo %ERRORLEVEL%

というコマンドラインは多くの場合意図しない結果となります。そこで、拡張機能が使える場合Setlocal「!」を用いて

setlocal enabledelayedexpansion
hoge.exe || echo !ERRORLEVEL!

とすることで「hoge.exe」の終了コードを正しく用いることができます。

<command1><command2> に「||」や「&&」を含む場合で条件の判定順序を変えたい場合はそれぞれのコマンドを括弧「( )」で囲みます。例えば以下のように記述します、

(program1.exe || program2.exe) && (program3.exe || program4.exe || program5.exe)

この例の場合は以下の通りです。

※ 「program3.exe || program4.exe || program5.exe」を括弧で括らない場合は、「((program1.exe || program2.exe) && program3.exe) || program4.exe || program5.exe」と同じ意味になります。

「||」文字そのものを通常の文字としてコマンドラインの一部に含めたりEchoコマンドなどで出力したりする場合は、「" "」の利用が可能であれば「" "」で括るか、そうではない場合は「^」文字を各文字の手前に記述する(「^|^|」などとする)必要があります。