[ 通常表示 ]  [ 簡易表示 ]  [ シンプル表示 ]

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

call【コマンド】

pointこの用語のポイント

pointWindowsで使えるコマンドだよ

pointバッチファイルの中でバッチファイルを呼び出すときに使うよ

スポンサーリンク

簡単に書くよ

call【コマンド】とは

バッチファイルからバッチファイルを起動するときに使うコマンド
です。

image piyo

詳しく書くよ

バッチファイル」は「バッチ処理を行うためのファイル」ね。
よく分からなければ、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」に移動したのが分かりました。

これが大まかな流れですが、一つだけ注意点があります。
話を簡単にするために「移動」と書きましたが、実際には「分身」です。

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


の部分ですね。
流れとしては

call

のようになります。
補足として、この例では「exit」があるのでその時点で処理が終了しますが、無ければ一番下まで(ラベルのところも再度)処理が行われます。

これが「call」コマンドでラベルを指定するときのやり方です。

最後に引数について見てみましょう。
「call」コマンドでは、呼び出すバッチファイルやラベルに引数(パラメータ)を渡すことができます。

渡し方は単純にバッチファイル名やラベル名の後ろに半角スペースで区切って書くだけです。
例えば

call :label01 "C:\Program Files\desktop.ini" "param2"

のようにですね。

受け取る方は「%1」や「%2」で受け取ります。
一つ目のパラメータを受け取るときは「%1」、二つ目のパラメータを受け取るときは「%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」に続けて、呼び出すバッチファイルやラベルとそいつに渡すパラメータを指定するだけです。

そんな感じ(--)ノ

image piyo2

一言でまとめるよ

まぁ「call」ってコマンドが出てきたら「バッチファイルの中でバッチファイルを呼び出すときに使うんだな~」と、お考えください。

一番上に戻るよ
スポンサーリンク