7

パラメータを渡すことができる .bat ファイルがあります。

LOAD_TABLE_WRAPPER.BAT Table1 DEV

簡単に言うと、SQL を実行して Table1 を開発環境にロードします。さて、一晩で複数のテーブルをロードしたいと思います。それで、次のようなマスター.BATをセットアップしました

::MASTER_LOAD.BAT
CALL LOAD_TABLE_WRAPPER.BAT Table1 Dev
CALL LOAD_TABLE_WRAPPER.BAT Table2 Dev
CALL LOAD_TABLE_WRAPPER.BAT Table3 Dev

cmd から MASTER_LOAD.BAT を送信すると、Table1 のロードは実行されますが、Table2 のロードには進みません。これらは、WRAPPER.BAT の最後の 2 行です。

:eof
exit %ERROR_STATUS%
4

4 に答える 4

6

LOAD_TABLE_WRAPPER.BAT のexit %error_status%コマンドがバッチ セッションを終了しているため、MASTER_LOAD.BAT は次の呼び出しで再開する機会がありません。

EXIT コマンドに /B オプションを追加するだけで問題を解決できます。

exit /b %error_stats%

バッチ ファイルで /B なしで EXIT を使用することはほとんどありません (ただし、/B が不要な場合もあります)。

ただし、CALL の代わりに CMD を介して呼び出されたスクリプトを実行する別の方法もあります。

::MASTER_LOAD.BAT
CMD /C LOAD_TABLE_WRAPPER.BAT Table1 Dev
CMD /C LOAD_TABLE_WRAPPER.BAT Table2 Dev
CMD /C LOAD_TABLE_WRAPPER.BAT Table3 Dev

メソッド間には多くの違いがあります

EXIT /B で CALL

  • 比較的速い
  • 戻り時に環境変数の値を保持できます (値を保持したくない場合は、SETLOCAL を使用できます)
  • 呼び出されたスクリプトは、遅延展開と拡張の状態 (有効または無効) を継承します。

CMD /C

  • 比較的遅い
  • 戻るときに環境変数の値を保持できません。(定義をファイルに書き出して、マスターに戻ったときに再度ロードすることもできますが、これは便利でも効率的でもありません)
  • 呼び出されたスクリプトは、常にデフォルトの遅延拡張と拡張の状態で開始されます (通常、遅延拡張は無効で、拡張は有効です)。

呼び出されたバッチ ファイルに /B オプションなしで EXIT があり、バッチ ファイルを変更して /B オプションを追加できない場合を除き、CALL で CMD /C を使用することはお勧めしません。

于 2012-08-03T17:32:22.827 に答える
0

CALL LOAD_TABLE_WRAPPER.BAT Table1 Dev の実行に問題はありますか? 呼び出しの間にエコーすると、どのような結果が得られますか?

于 2012-08-03T16:59:13.963 に答える
0

この問題を解決するには、start コマンドを使用する必要があります。Call は、現在のプロセスにコマンドを実行させます。start の詳細については、こちらをご覧ください。基本的な実装は次のとおりです。

"START program-name arg1 arg2"`
于 2012-08-03T16:55:35.513 に答える
-1

次のように、一時停止コマンドを発行してみてください。

CALL LOAD_TABLE_WRAPPER.BAT Table1 Dev PAUSE CALL LOAD_TABLE_WRAPPER.BAT Table2 Dev PAUSE CALL LOAD_TABLE_WRAPPER.BAT Table3 Dev

于 2013-07-18T03:41:06.313 に答える