「||」 (論理和) - DOS/コマンドプロンプト コマンド一覧
[Windows NT 系] 左のコマンドの実行に失敗したときに右のコマンドが実行されます。
構文
<command1> || <command2>
解説
厳密には、「||」の左側で指定したコマンドラインの終了コード(Errorlevel)が0でないときに右側で指定したコマンドラインが実行されます。終了コードが0のときは右側のコマンドは実行されません。
C言語などでは「||」の左側が0でないとき(真のとき)には右側は実行されません(ショートサーキット)。コマンドプロンプトでの「||」でもこれは同様ですが、終了コードは一般的に「0」が「正常終了」を表すため、終了コードが0のときに「真である」と考えて「0のときは右側を実行しない」という流れとなります。
注意点として、いずれか、または両方のコマンドラインの中に環境変数を用いるとすべてのコマンドが実行される前に環境変数が展開されます(これはIfやForで括弧を使った時も同様です)。そのため、
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)
この例の場合は以下の通りです。
- まず「program1.exe」が実行され、成功した場合は「program2.exe」を無視して「program3.exe」以下の実行を行います。
- 「program1.exe」が失敗した場合は「program2.exe」を実行し、それが成功したら「program3.exe」以下の実行を行います。
- 「program1.exe」が失敗した場合は「program2.exe」を実行しますが、それも失敗したら「program3.exe」以下の実行は行いません。
- 「program3.exe」以下の実行は、「program3.exe」が成功したらそこで終了し、失敗したら「program4.exe」、さらに失敗したら「program5.exe」が実行されます。
※ 「program3.exe || program4.exe || program5.exe」を括弧で括らない場合は、「((program1.exe || program2.exe) && program3.exe) || program4.exe || program5.exe」と同じ意味になります。
「||」文字そのものを通常の文字としてコマンドラインの一部に含めたりEchoコマンドなどで出力したりする場合は、「" "」の利用が可能であれば「" "」で括るか、そうではない場合は「^」文字を各文字の手前に記述する(「^|^|」などとする)必要があります。
なお、「|」は効果が異なります。