Microsoft Windowsでのバッチファイルからバッチファイルを呼び出す方法

最近のMicrosoft Windowsであれば何でもPowerShellで良いのかと思うと、 標準入出力を使うと文字コードがおかしかったりして、 追求する時間もないのでMS-DOSの時代からあるバッチファイル(.bat)を使うことになってしまう。

バッチファイルからバッチファイルを呼ぶには、3通りの方法があって挙動が全て違うのだが、 いつも分からなくなってしまうので、まとめておく。

callを使う

以下のように2つのバッチファイルを用意する。 call.batからsubroutine.batを呼び出している。

>type subroutine.bat
@echo off
echo Subroutine is called.
>type call.bat
@echo off
echo Before call
call subroutine.bat
echo After call
結果は以下のようである。
>call.bat
Before call
Subroutine is called.
After call
つまり、バッチファイルからバッチファイルをサブルーチン的に呼び出す方法は、このcallを使う方法である。

startを使う

以下のように2つのバッチファイルを用意する。 start.batからsubroutine.batを呼び出している。

>type subroutine.bat
@echo off
echo Subroutine is called.
>type start.bat
@echo off
echo Before start
call subroutine.bat
echo After start
結果は以下のようである。 まず、start.batを実行したコマンドプロンプトウィンドウでは以下のように表示される。
>start.bat
Before start
After start
同時に、以下のような内容を表示する新しいコマンドプロンプトウィンドウも新しく開かれる。
Subroutine is called.
>

バッチファイルをそのまま実行する

以下のように2つのバッチファイルを用意する。 direct.batからsubroutine.batを呼び出している。

>type subroutine.bat
@echo off
echo Subroutine is called.
>type direct.bat
@echo off
echo Before direct call
call subroutine.bat
echo After direct call
結果は以下のようである。
>direct.bat
Before direct call
Subroutine is called.
つまり、バッチファイルからバッチファイルを呼んでいるが、呼ばれたバッチファイルが終わっても呼び出し元のバッチファイルには戻らない。

Comments

Popular posts from this blog

PostgreSQLのOracle Foreign Data WrapperをWindowsで使う

#5000へCメールを送れないau端末でezweb.ne.jpの電子メールアドレスをIMAP4/SMTPで扱う方法

Amazon Web Service EC2のa1インスタンスでNetBSD/aarch64を動かしてみる