gccrun.cmd その6

gccrun.cmd では、gcc で C ソースコードのコンパイルとリンクをして、できあがったアプリケーションを実行するというのがメインの処理になっている。

それ以外では、いくつかのエラー処理を行う。

REM 引数チェック
if "%1"=="" goto argerr
if not exist "%1" goto srcerr

gccrun.cmd の先頭には、引数をチェックする処理が書かれており、エラーの種類によって、対応したラベルにジャンプするようになっている。

エラーの種類は二つあり、一つ目は、引数エラーである。引数エラーとは、gccrun.cmd 実行の際に、何も引数を渡さなかった場合に発生するものである。引数エラーが発生した場合、処理は :argerr ラベルに移る。

:argerr
  REM 引数エラー
  goto err

:argerr ラベル直下では、:err ラベルにジャンプするという処理を行う。

二つ目のエラーは、入力ファイルエラーだ。第一引数として渡した名前のファイルが実在しなかった場合に発生し、処理は :srcerr ラベルに移る。

:srcerr
  REM 入力ファイルエラー
  echo file "%1" is not exist
  goto err

:srcerr ラベル直下では、画面上にメッセージを表示する処理を行う。すなわち、「そのような名前のファイルが存在しない」ということを伝えるのである。そののち、処理は :err ラベルに移行する。

:err ラベル直下では、以下の処理を行う。

:err
  REM 一般エラー
  echo usage: %~nx0 filename.c [-c^|-w]
  goto end

すなわち、echo コマンドによって、gccrun.cmd の使い方を画面に表示するのである。

usage: gccrun.cmd filename.c [-c|-w]

引数を受け取るバッチファイルのようなコンソールアプリケーションには、このように、使い方を表示する機能を持たせることによって、使い方を忘れてしまったときでも、すぐに使用を再開できるようになる。

%~nx0 とは、%0 の変形である。n はファイル名を表し、x は拡張子を表している

%0 とは、バッチファイル内において、バッチファイルが起動するきっかけとなったコマンドを表す変数である。たとえば、"C:\My Apps\gccrun" というコマンドによって起動した場合、%0 は "C:\My Apps\gccrun" という文字列を表す。

%0 の内容は、一意に定まらないため、%~nx0 という表現によって、必ず、gccrun.cmd という文字列になるように変換を行っている。

[-c^|-w] という表記は、画面上では [-c|-w] と表示される。パイプ記号 |^ によってエスケープしているのだ。

:end