Windowsバッチファイル(called.bat
またはcalled.cmd
)別のバッチファイルから呼び出すことができます(caller.bat
またはcaller.cmd
)またはインタラクティブなcmd.exeいくつかの方法でプロンプトを表示します。
called.bat
call called.bat
cmd /c called.bat
start called.bat
ヘルプテキストに基づいて目的の使用法を区別するのは非常に困難です。例えば直接呼び出しの代わりに「呼び出し」コマンドを使用する理由。何が違うの?
さまざまな観点から、4つの可能性すべて(および欠落している場合は他の可能性)を分析する要約レポートに興味があります:適合するように設計された推奨ユースケース、プロセス生成、実行コンテキスト、環境、リターンコード処理。
注:Windows XP SP3を使用しています。
バッチファイルは、現在のcmd.exeインスタンス(または、エクスプローラーでダブルクリックした場合は新しいcmd.exeインスタンス)によって実行されます。
#1と同じですが、バッチ/ cmdファイル内で使用した場合にのみ効果があります。 「呼び出し」のないバッチファイルでは、親バッチファイルが終了し、呼び出されたバッチファイルに制御が渡されます。 with 'call'は子バッチファイルを実行し、親バッチファイルは呼び出しに続くステートメントで続行します。
新しいcmd.exeインスタンスでバッチファイルを実行します。
Startは、新しいウィンドウの新しいcmd.exeインスタンスでバッチファイルを実行し、呼び出し元は完了を待ちません。
ここのコメントから明らかでないこと:バッチファイルの名前(元の質問のケース#1)だけを使用して別のバッチファイルを呼び出す場合、呼び出し元のバッチファイルからstopsを実行します。たとえば、次の行では:
called.bat
echo Hello
「echo Hello」行(およびそれに続くもの)は呼び出されません。 「call」キーワードを使用すると、呼び出し後に実行が再開されます。したがって、この場合:
call called.bat
echo Hello
「echo Hello」行が呼び出されます。
さらに、called.batファイルに設定されているすべての変数も呼び出しプロセスに戻されます。
次の行を含む「called.bat」ファイルを想像してください。
set MYVAR=hello
次に、%MYVAR%を使用すると、呼び出し元のバッチファイルで使用可能になります。
call called.bat
しかし、それは使用しません
REM starts a new cmd.exe process
start called.bat
REM stops and replaces current cmd.exe process with a new one
called.bat