このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
今日は 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 など、別のコマンドを引数に取るコマンドで、
条件や繰り返し部分で、複数のコマンドを実行するために、
利用することができるのだ。