从另一个.bat文件调用.BAT文件

时间:2012-08-03 16:49:31

标签: batch-file

我有一个.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,它会执行Table1的加载,但不会继续加载Table2。这是WRAPPER.BAT的最后两行

:eof
exit %ERROR_STATUS%

4 个答案:

答案 0 :(得分:5)

LOAD_TABLE_WRAPPER.BAT中的exit %error_status%命令正在终止批处理会话,因此您的MASTER_LOAD.BAT永远不会有机会在下一次调用时继续。

只需在EXIT命令中添加/ B选项

即可解决问题
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

方法之间存在许多差异

使用EXIT / B进行CALL

  • 比较快
  • 可以在返回时保留环境变量值(如果您不想保留值,则SETLOCAL可用)
  • 被叫脚本继承延迟扩展和扩展状态(启用或禁用)

CMD / C

  • 比较慢
  • 返回时无法保留环境变量值。 (您可以将定义写出来并在返回主文件时重新加载,但这不方便或有效)
  • 调用脚本始终以默认的延迟扩展和扩展状态启动(通常延迟扩展已禁用且扩展已启用)

除非被调用的批处理文件在没有/ B选项的情况下进行EXIT,否则我绝不会建议使用CMD / C而不能使用CMD / C,并且您无法修改批处理文件以添加/ B选项。

答案 1 :(得分:0)

您应该使用start命令来解决此问题。调用使当前进程运行命令。您可以详细了解start here.基本实现应该是:

"START program-name arg1 arg2"`

答案 2 :(得分:0)

执行CALL LOAD_TABLE_WRAPPER.BAT Table1 Dev时是否存在问题?在呼叫之间回应时的结果是什么?

答案 3 :(得分:-1)

尝试给出一个PAUSE命令,如下所示:

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