2012-08-03 158 views
6

我有一個可以傳遞參數的.bat文件。從另一個.bat文件調用.BAT文件

LOAD_TABLE_WRAPPER.BAT Table1 DEV 

簡而言之,它運行SQL以在Dev環境中加載Ta​​ble1。現在,我希望它在一夜之間加載多個表格。所以,我設置了一個主.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,它執行負載表1,但不會繼續表2負荷。這些是WRAPPER的最後兩行.BAT

:eof 
exit %ERROR_STATUS% 

回答

0

您應該使用start命令來解決此問題。調用使當前進程運行命令。您可以瞭解更多關於啓動here.基本實現,應該是:

"START program-name arg1 arg2"` 
0

是否有執行CALL LOAD_TABLE_WRAPPER.BAT表1開發出了問題?在呼叫之間回顯的結果是什麼?

5

您的LOAD_TABLE_WRAPPER.BAT中的exit %error_status%命令正在終止您的批處理會話,因此您的MASTER_LOAD.BAT永遠不會有機會在下次調用時恢復。

您可以通過添加/ B選項你EXIT指令只是解決問題

exit /b %error_stats% 

我幾乎從來沒有在一個批處理文件,而不/ B使用EXIT(儘管有些時候/ B是不想要)。

但另一種方法是通過CMD而不是CALL運行被調用的腳本。

::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 

有許多的方法之間的差異

CALL與EXIT/B

  • 較快
  • 可以在返回保存環境變量的值(SETLOCAL可用,如果你不想保留值)
  • 被調用的腳本繼承延遲擴展和d擴展狀態(啓用或禁用)

CMD/C

  • 相對緩慢
  • 不能返回時保存環境變量的值。(你可以寫出來的定義到一個文件並加載它們在返回到主回來,但不是方便或有效率)
  • 調用的腳本總是使用默認的延遲擴展和延伸狀態(通常延遲擴展被禁用,擴展啓用)

我絕不會推薦使用CMD/C通過CALL,除非被調用的批處理文件具有不帶/ B選項的EXIT,並且您不能修改批處理文件以添加/ B選項。

-1

儘量給暫停命令,就像這樣:

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