今日は if コマンド。
プログラミングの経験者は、コマンドの名前だけで
このコマンドの役割は分かると思う。

if コマンドは条件による分岐を行う。
コマンドプロンプト上で実行する場合はあまり使わないが、
バッチファイル上では、処理の分岐に使う事が多い。

if 文の構文は以下の通り。

if string==string コマンド
if "string"=="string" コマンド

string の部分には、任意の文字列が入る。
通常、string の片方に変数を使う事が多い。

if "%OS%"=="Windows_NT" echo NT

一般的なプログラミング言語では、
文字列リテラルにダブルクォートなどの区切り文字を書く。
コマンド環境においては、ダブルクォートはただの文字だ。

なので、上の例では、ダブルクォートを含めて、
文字として比較されることになる。
つまり、変数 OS と Windows_NT を比較するのではなく、
"変数 OS" と "Windows_NT" を比較しているのだ。
なので、ダブルクォートは必須ではない。

しかしながら、例外的に if コマンドでは、
ダブルクォートを文字列の区切りとして特別扱いする。
これは、スペースを含む文字列を比較可能にするためだ。

また、ダブルクォートを省略した場合、
どちらかの文字列が空文字の場合構文エラーになるので、
ダブルクォートは指定した方がいいと言える。

/i スイッチを指定すると、
文字列の大文字小文字を無視した比較が可能になる。

if /i "%OS%"=="windows_nt" echo NT

比較の前に、not 修飾子をつければ、
等しくない比較をすることができる。

if /i not "%OS%"=="windows_nt" echo Non-NT

また、別の構文で、ファイルやフォルダが
存在するかどうかを調べることもできる。

if exist ファイル名 コマンド

if exist %SystemDrive%\hiberfil.sys echo 休止状態が有効

Program Files など、スペースを含む場合、
指定しないと構文エラーになるので、
その場合、ファイル名はダブルクォートで囲んで指定する。
スペースを含む可能性が考えられる場合は、
常にダブルクォートで囲んでおく方がいいと言える。

exist の前にも、not 修飾子を指定することが可能である。

if not exist ファイル名 コマンド

if には、プログラミングではおなじみの、
else 構文も存在する。

if /i "%OS%"=="windows_nt" (echo NT) else echo Non-NT

ここでは括弧を使っているが、
括弧には、コマンドの境界を明確にする役割がある。

通常、コマンドは、改行文字までの間の引数を
全て解釈してしまうので、上記で括弧がない場合、
最初の echo コマンドが全ての引数を取ってしまい、
NT else echo Non-NT を表示するという命令になってしまう。

if /i "%OS%"=="windows_nt" echo NT else echo Non-NT

括弧の役割はこれだけではない。
if や for など、別のコマンドを引数に取るコマンドで、
条件や繰り返し部分で、複数のコマンドを実行するために、
利用することができるのだ。