call【コマンド】
コマンドだよ
Windowsで使えるよ
バッチファイルの中でバッチファイルを呼び出すときに使うよ
簡単に書くよ
call【コマンド】とは
コンピュータさんに対する命令文(コマンド)のひとつ
であり
バッチファイルからバッチファイルを起動するときに使うコマンド
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として「バッチファイル」について簡単に説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
バッチファイルは「バッチ処理をやるためのファイル」です。
よく分からなければ、Windowsさん用の命令を寄せ集めて作ったプログラムだとお考えください。
以上を踏まえて
バッチファイルの中で別のバッチファイルを呼び出すときに使うコマンド
が「call」コマンドです。
「call」コマンドはWindows系で使えます。
書き方は
call [バッチファイル名] [バッチファイルに渡すパラメータ]
もしくは
call [ラベル名] [ラベルに渡すパラメータ]
です。
オプションは、ありません。
それでは実際に「call」コマンドの使い方を見てみましょう。
まずは
call [バッチファイル名] [バッチファイルに渡すパラメータ]
について、見てみますね。
例えば以下のようなバッチファイルがあったとします。
■hoge.bat
@echo off
echo "hoge:01"
call hoge_sub
echo "hoge:02"
pause
■hoge_sub.bat
@echo off
echo "hoge_sub:01"
「hoge.bat」を実行すると、以下のような結果が表示されます。
"hoge:01"
"hoge_sub:01"
"hoge:02"
続行するには何かキーを押してください . . .
「hoge:01」→「hoge_sub:01」→「hoge:02」の順で動いています。
この結果から「call hoge_sub」の部分で「hoge_sub.txt」が呼び出されたのが分かりました。
少し話がそれますが、他の部分も補足しておきます。
「@echo off」は「実行するコマンドを画面に表示しないでね」な命令です。
この指定がないとバッチファイルの中で実行したコマンドも画面に表示されてしまいます。
この例では
C:\>echo "hoge:01"
"hoge:01"
C:\>call hoge_sub
C:\>echo "hoge_sub:01"
"hoge_sub:01"
C:\>echo "hoge:02"
"hoge:02"
C:\>pause
続行するには何かキーを押してください . . .
のようになります。
「pause」は「ちょっと待っとけ」の命令です。
「続行するには何かキーを押してください . . .」と画面に表示して一時待機してくれます。
これがバッチファイルからバッチファイルを呼び出すやり方です。
次に
call [ラベル名] [ラベルに渡すパラメータ]
について見てみます。
「ラベル」はバッチファイルの中に付けられる目印だと思ってください。
この目印をcallすることで、その場所に移動できるイメージです。
例えば以下のようなバッチファイルがあったとします。
■hoge2.bat
@echo off
echo "hoge:01"
call :label01
echo "hoge:02"
pause
exit
:label01
echo "label01"
このバッチファイルを実行すると、以下のような結果が表示されます。
"hoge:01"
"label01"
"hoge:02"
続行するには何かキーを押してください . . .
「hoge:01」→「label01」→「hoge:02」の順で動いていますね。
この結果から「call :label01」の部分で「:label01」に移動したのが分かりました。
これが大まかな流れですが、1つだけ注意点があります。
話を簡単にするために「移動」と書きましたが、実際には「分身」です。
hoge2.batを例に説明すると、hoge2.batさんは上から順番にお仕事をしていきます。
そして
call :label01
の行に来ると動きがピタッと止まります。
ここで分身の術です。
なんと!
hoge2.batさん2号が生まれます。
hoge2.batさん2号は「:label01」に移動してそこから一番下までお仕事をします。
echo "label01"
のところは、hoge2.batさんではなくhoge2.batさん2号がお仕事しているのです。
そして一番下までお仕事が終わると「後はよろしくね~」とhoge2.batさんに託し、hoge2.batさん2号は消えちゃいます。
hoge2.batさん2号が消えると、hoge2.batさんは続きのお仕事を一番下までやります。
echo "hoge:02"
pause
exit
の部分です。
流れとしては
のようになります。
補足として、この例では「exit」があるのでその時点で処理が終了しますが、なければ一番下まで(ラベルのところも再度)処理をやります。
これが「call」コマンドでラベルを指定するときのやり方です。
最後に引数について見てみましょう。
「call」コマンドでは、呼び出すバッチファイルやラベルに引数(パラメータ)を渡せます。
渡し方は単純にバッチファイル名やラベル名の後ろに半角スペースで区切って書くだけです。
例えば
call :label01 "C:\Program Files\desktop.ini" "param2"
のように書きます。
受け取る方は「%1」や「%2」で受け取ります。
1つ目のパラメータを受け取るときは「%1」です。
2つ目のパラメータを受け取るときは「%2」です。
パラメータが増えるほど、%(パーセント)の横の数字も増えていきます。
またパラメータの受け取りでは、パラメータがファイル名やパスのときに便利な、特殊な指定をできます。
特殊な指定を一覧にまとめると、以下のようになります。
| 指定 | 説明 |
|---|---|
| %* | パラメータ全部 |
| %~1 | パラメータを囲ってる"(ダブルクォーテーション)を削除 |
| %~f1 | パスとファイル名全部 |
| %~d1 | ドライブ文字だけ |
| %~p1 | パスだけ。ドライブ文字もなし |
| %~n1 | ファイル名だけ(拡張子もなし) |
| %~x1 | 拡張子だけ |
| %~s1 | パスを省略表現 |
| %~a1 | ファイルの属性だけ |
| %~t1 | ファイルの日付と時刻だけ |
| %~z1 | ファイルサイズだけ |
| %~$PATH:1 | 環境変数「PATH」に指定されている場所を探して、同じ名前のファイルがあればパス付きで表示 |
数字の「1」の部分は、何番目のパラメータを対象にするかで変わります。
例えば2番目のパラメータのファイル名だけを取得したい場合は「%~n1」になります。
基本的な構造は「%~」+「指定」+「パラメータの位置」です。
例えば「%~nx1」のように複数の指定を組み合わせることもできます。
実際にやってみた方が分かりやすいですよね。
例えば以下のようなバッチファイルを動かすと
■hoge3.bat
@echo off
echo "hoge:01"
call :label01 "C:\Program Files\desktop.ini" "param2" "desktop.ini"
echo "hoge:02"
pause
exit
:label01
echo "label01"
echo %%1:%1
echo %%2:%2
echo %%*:%*
echo %%~1:%~1
echo %%~f1:%~f1
echo %%~d1:%~d1
echo %%~p1:%~p1
echo %%~n1:%~n1
echo %%~x1:%~x1
echo %%~nx1:%~nx1
echo %%~s1:%~s1
echo %%~a1:%~a1
echo %%~t1:%~t1
echo %%~z1:%~z1
echo %%~$PATH:1:%~$PATH:1
echo %%~$PATH:3:%~$PATH:3
私の環境では以下の結果になります。
"hoge:01"
"label01"
%1:"C:\Program Files\desktop.ini"
%2:"param2"
%*:"C:\Program Files\desktop.ini" "param2" "desktop.ini"
%~1:C:\Program Files\desktop.ini
%~f1:C:\Program Files\desktop.ini
%~d1:C:
%~p1:\Program Files\
%~n1:desktop
%~x1:.ini
%~nx1:desktop.ini
%~s1:C:\PROGRA~1\desktop.ini
%~a1:--ahs----
%~t1:2009/07/14 13:54
%~z1:174
%~$PATH:1:C:\Program Files\desktop.ini
%~$PATH:3:C:\Windows\System32\desktop.ini
"hoge:02"
続行するには何かキーを押してください . . .
細かい部分は頑張って見てください。
最初はちょっと取っ付きにくいかもしれませんが、使い方を覚えてしまうと便利です。
余裕があれば使い方をマスターしておいた方が良いと思います。
これが「call」コマンドでパラメータを受け渡しするときのやり方です。
そして、ここまでが「call」コマンドの使い方のすべてです、多分。
長々と書いてしまいましたが、使い方自体は単純です。
「call」に続けて、呼び出すバッチファイルやラベルとそいつに渡すパラメータを指定するだけ
です。
一言でまとめるよ
まぁ「call」ってコマンドが出てきたら「バッチファイルの中でバッチファイルを呼び出すときに使うんだな~」と お考えください。






