2012-08-03 111 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