今までに推測していなかった場合、バッチファイルは基本的なタイプのプログラミング言語として機能します。最新のプログラミング言語が提供するものの1つは、コードを小さな断片にモジュール化する機能です。これにより、1つの断片を変更した場合でも、無関係なコードを誤って変更するリスクがなくなります。大きなバッチファイルを小さなファイルに分割し、CALLステートメントを使用して必要に応じて個々のモジュールを呼び出すことにより、大きなバッチファイルをモジュール化できます。

ユーザーがいくつかの機能のいずれかを呼び出すことができるメニューシステムがある場合を考えてみましょう。ここでは、各関数を独自のバッチファイルに配置し、メインメニューのバッチファイルでCALLステートメントを使用して、選択した関数を呼び出します。これにより、メニューに戻り、ユーザーが別の関数を選択できるようになります。

Menu.batは次のようになります。

@ECHO OFF :TOP CLS ECHO   Welcome to the Main Menu! Here are your choices...

ECHO.

ECHO A) Perform Function A          B) Perform Function B ECHO C) Perform Function C          D) Perform Function D ECHO.

ECHO Q) Quit ECHO.

CHOICE /C ABCDQ GOTO %ERRORLEVEL% :5 GOTO :EOF :4 CALL FuncD.bat GOTO TOP :3 CALL FuncC.bat GOTO TOP :2 CALL FuncB.bat GOTO TOP :1 CALL FuncA.bat GOTO TOP

そして、FuncA.batは次のようになります:

ECHO This is Function A PAUSE

ここでは何も面白いことが起こらないという事実にもかかわらず、それはコマンドベースのメニューシステムのためのまともなフレームワークの始まりです。そして、注意すべきいくつかの項目があります。上から下に向かって、最初に出くわす新しいコマンドはCLSコマンドです。この単純なコマンドは画面をクリアするだけなので、メニューは常にそれ自体で見栄えが良くなります。目の肥えた目は、ピリオドの直後に続くいくつかのECHOステートメントにも気付くでしょう。これは、空白行を出力する方法です。もう1つの新しいアイテムは、組み込みの:EOFラベルです。これにより、ファイルの最後の行として存在する独自のラベルを宣言する必要がなくなります(他のヒントで使用されている「:Done」ラベルのように)。

これにより、CALLステートメントが表示されます。 CALLで指定されたパラメーターは、次に呼び出されるバッチファイルの名前です。したがって、たとえば、ユーザーがメニューからオプションAを選択した場合、バッチファイルはすぐに:1ラベルに移動し、次にFuncA.batが呼び出されます。私のFuncA.batファイルは、単に行をエコーし​​、一時停止します。 PAUSEステートメントを使用すると、「続行するには任意のキーを押してください…​」という行が出力されます。次に、ユーザーがキーを押すまで、バッチファイルの実行を一時停止します。キーが押されると、バッチファイルが続行されます。この場合、FuncA.batが終了し、FuncA.batの呼び出しの直後の行でメインメニューのバッチファイルの制御が再開されます。それで、次に起こることは、すべてを最初からやり直すGOTOTOPです。

FuncA.batが呼び出されたときにECHO状態が維持されるため、FuncA.batの先頭に別の「@ECHOOFF」を配置する必要がないことに注意してください。

このヒント(13187)は、Windows 7、8、および10に適用されます。