75

バット ファイル内から別のバッチ ファイルを呼び出したが、まだいくつかの操作が完了していない場合、最初のバッチ ファイルへの呼び出しが完了またはエラー後に、最初にそれを呼び出したファイルに戻ることを確認するにはどうすればよいですか?実例?

例:

CD:\MyFolder\MyFiles
Mybatfile.bat

Copy afile toHere

また

CD:\MyFolder\MyFiles
CALL Mybatfile.bat

COPY afile toHere

CALLそれらを使用するか、まったく使用しないことの違いは何STARTですか? これは、コピー コマンドの結果を返すかどうかに影響しますか?

4

4 に答える 4

79

他の人が言っCALLたように、.bat内で別のbatファイルを呼び出して呼び出し元に戻るのが通常の方法です。

ただし、呼び出されたバッチ ファイルに致命的な構文エラーがある場合、または呼び出されたスクリプトが /B オプションなしで EXIT で終了した場合は、すべてのバッチ ファイル処理が停止します (制御は呼び出し元に戻りません)。

CMD コマンドを使用して 2 番目のスクリプトを実行すると、(もちろんコンソール ウィンドウが開いている限り) 呼び出し元に制御が戻ることを保証できます。

cmd /c "calledFile.bat"

ただし、これには、呼び出されたバッチによって設定された環境変数が返されたときに保持されないという制限があります。

すべてのケースで返品を保証し、環境の変更を維持するための適切な解決策を知りません。

CMD の使用中に変数を保存する必要がある場合は、「呼び出された」スクリプトで変数の変更を一時ファイルに書き込み、呼び出し元に一時ファイルを読み取らせて変数を再確立させることができます。

于 2013-02-06T15:15:52.493 に答える
45

call.bat または .cmd ファイルには必要です。そうしないと、コントロールは呼び出し元に戻りません。
exe ファイルの場合は不要です。

Startと同じではなく、call新しい cmd.exe インスタンスを作成するため、呼び出されたバッチ ファイルを非同期的に実行できます。

于 2013-02-06T14:52:56.947 に答える
12

`CALL'ステートメントはMS-DOS3.3で導入されました

これは、呼び出し元のバッチファイルの実行を中止せずに、バッチファイル内の他のバッチファイルを呼び出すために使用され、両方のバッチファイルに同じ環境を使用します。

したがって、あなたの場合、解決策は使用することですCALL

于 2013-02-06T14:55:37.930 に答える