2005年10月23日

引数の受け取り方

早速、今回は 「引数の受け取り方」 だったよね。

今、仮に C:¥test¥test.bat というバッチファイルを
呼び出すこととしよう。そして、これに
arg1, arg2, ・・・ arg10 までの文字列を渡すとしよう。

えっ? そんなに渡していいのかって??

ん〜〜、いい質問だね ^^;
Windows では、パスの長さがで 256 文字程度(注1)まで
という制約があるんだ。短い文字列なら、数が多くても大丈夫。
あとは呼び出された側で対応するんだからね。


さあ、話を元に戻して、

呼び出し方は解かるよね。もし、スペースを含む文字列なら
2重引用符で囲むんだよ。変数を使って呼び出すなら
囲っておいたほうが確実だよ。

C:¥test¥test.bat "arg1" "arg2" ・・・ "arg10"

って感じだよ。

あとは、この引数をどうやってバッチファイルの中で受け取って、
どう使用するかなんだけど、実は、何もしなくっていいんだ ^^;

既に決まった変数に格納されているんだよ。

バッチファイルでは、% を変数を表すのに使うんだけど、
%0%9 という変数は引数用に予約されていて、この中に
格納済みなんだよ。

%0 には、呼び出されたコマンドが完全パスで格納されている。
%1%9 には、それぞれ、コマンドに続いて渡された引数が
格納されているんだ。

あれ? じゃあ、arg10 はどおすんの??

うッ・・・ そ、そのままじゃぁ使えないんだ ^^;
でも、 shift っていうコマンドがあって、これを使うと
引数の格納位置をズラしてくれるんだ。

%2%1 に、・・・ %9%8 に、その外から %9 にって具合に

だから、10 以上の引数が予想されるときには、shift
使って処理しておかないとマズイんだよ。

参考用に記載した 「+Lhaca でサブホルダ毎に一括圧縮」
ソースでも shift を使っているよ。逆にいえば、
順番に処理するなら shift させてしまえば、必要最小限の
引数 (この場合 %1) だけで処理することができるんだ。

引数が無くなったら、その変数は空文字になる。
shift の次の行にある

if "%1"=="" goto end

は、その空文字のチェックをしてるんだ。
もし、"%1" と "" が同じだったら end ってラベルに飛んでね。
っていう意味の命令だよ。

プログラムするのには、こういった条件分岐は重要に
なってくるから、if 文、覚えちゃおうね。



じゃあ、次回は環境変数あたりの話をするね。
また、参考用のソースを例にして進めていきます。




(注1) VC で include する windows.h には MAX_PATH として
    260 が定義されています。この値を基準に作成されている
    アプリケーションが多いと思います。


応援ポチ  お願いしま〜す。

posted by Woody at 05:09 | 静岡 ☁ | Comment(0) | TrackBack(0) | コマンドプロンプト
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのTrackBack URL
http://blog.seesaa.jp/tb/8483886
※特に許可した場合を除き、一方的な TrackBack は
  SPAM として削除いたします。ご了承ください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。