1. ホーム
  2. batch-file

バッチファイルを「呼ぶ」「呼ばない」にする?

2023-09-26 11:38:55

質問

bat ファイルの中から別のバッチ ファイルを呼び出したが、まだいくつかの操作が残っていた場合、最初の bat ファイルの呼び出しが完了またはエラー後に、最初に呼び出したファイルに戻ることを確認するにはどうしたらよいでしょうか。

例を挙げます。

CD:\MyFolder\MyFiles
Mybatfile.bat

Copy afile toHere

または

CD:\MyFolder\MyFiles
CALL Mybatfile.bat

COPY afile toHere

の違いは何ですか? CALLSTART のいずれかを選択するか、あるいはまったく選択しないか?これは、コピーコマンドの結果を返すかどうかに影響するのでしょうか?

どのように解決するのですか?

他の方もおっしゃっているように CALL は、.bat 内の別の bat ファイルを呼び出して呼び出し元に戻る、通常の方法です。

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

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

cmd /c "calledFile.bat"

しかしこれには、呼び出されたバッチで設定された環境変数が復帰時に保存されないという制限がある。

すべてのケースでreturnを保証し、環境の変更を保存する良い解決策を私は知らないのです。

CMD を使用している間、本当に変数を保持する必要がある場合、"called" スクリプトに変数の変更を一時ファイルに書き込ませ、次に呼び出し側に一時ファイルを読ませて変数を再確立させることが可能です。