2011年1月13日木曜日

CALL = バッチファイルやラベルを呼び出す - Windowsのコマンドプロンプト(bat,cmd)

Windowsコマンド。プログラム実行関連
Windowsコマンド。制御文と環境変数
○Windows XP
バッチファイルやラベルを呼び出します。終了後に戻ってきます。

o 後ろに引数を付ける事も出来ます。
o バッチファイルから部品のバッチファイルを呼びたい時に便利です。


**** 書式
--------
call バッチファイル名 [引数1 引数2 ...]
もしくは
call :ラベル名 [引数1 引数2 ...]
--------

o コマンド名やバッチファイル名、ラベル名は、大文字小文字のどちらでも大丈夫です。

(個別説明)
--------
call バッチファイル名 [引数1 引数2 ...]
--------

o バッチファイル名 = 呼び出したいバッチファイルを指定します。
    + 空白付きで渡したい時は、「"」で括ります。(例: "C:\Documents and Settings\me\testb.bat")
o 引数1 引数2 ... = 引数を1つ以上付ける事が出来ます。
    + 空白付きで渡したい時は、「"」で括ります。(例: testb.bat "param 1" "param 2")
--------
call :ラベル名 [引数1 引数2 ...]
--------

o ラベル名 = 同じバッチファイルの中で呼び出したい時に使います。
    + バッチファイルの最後に到達すると、CALL文に戻ってきます。


**** 使用例
o バッチファイルを呼び出す方法
--------
call mikusan.bat
call mikusan.bat こんにちは。ミクさん
call "C:\ミクさん 連絡帳\mikusan.bat" "おはようございます ミクさん"
--------


o ラベルを呼び出す方法 -- おはよう.bat
--------
@echo off
call :ミクさん おはようございます。
call :リンちゃん おはようございます。
call :レン君 おはようございます。

goto :eof

:ミクさん
echo おはよー。
goto :eof

:リンちゃん
echo おはよ。
goto :eof

:レン君
echo おはようございます。
goto :eof

rem 以下の文は実行されません。
echo ネギ
--------

o 「goto :eof」の代わりに、「exit /b」を使う事も出来ます。
o ラベル名を日本語にしてみました。


**** 機能
o バッチファイルを呼び出します。ラベルを指定する事も出来ます。
o 途中に空白を入れたい時は、その引数を「"」で括ります。
o バッチファイル内で文法エラーが起こらなければ、バッチファイル終了後に制御は戻ってきます。
    + ですので、バッチファイルから部品のバッチファイルを呼びたい時に便利です。
o ラベルを指定した場合、バッチファイル最後への到達後に制御は戻ってきます。
    + ですので、関数のように書く事も出来ます。
o 呼び出した先では、引数に相当する変数(%1など)の値が、CALL で呼び出した時の引数に変わります。

** 変数の保護について
o 引数に相当する変数(%1など)は保護します。
    + 呼び出し元に戻ってくると、%1, %2などは、元に戻ります。
o 環境変数は保護しません。
    + 呼び出した先で環境変数を変更すると、呼び出し元にも反映されます。
    + 環境変数の保護が必要な時は、SETLOCAL / ENDLOCAL コマンドを使います。

** 仕様外の動作
o CALL の後ろにコマンドを書く事が出来ました。( Windows XP )
    + 例:「call echo a」
o 但し、そのように書いた時の制約の有無など、詳しい事は調査していません。


**** メモ
o バッチファイル名の前に CALL を付けなくても、バッチファイルを呼び出す事は出来ます。
o 但し、この場合、バッチファイル終了後に制御は戻りません。


**** 確認したバージョン
o Windows XP Service Pack 3


==
関連ページ:
    ▼Windowsコマンド。プログラム実行関連▼ABC順
    ▼Windowsコマンド。制御文と環境変数▼ABC順
    ▼Windowsコマンド一覧▼ABC順
    ▼コマンドプロンプト画面
    ▼制作メモ
    > PAUSE = 処理を一時停止する
    EXIT = 終了する
    REM = コメントを書く
(2011年8月5日追加。exit /b)
(2011年2月19日変更。書式を個別説明化)
(2011年2月8日追加。機能欄にて、変数の扱いと仕様外の動作)