我有一个.bat文件,我可以传递参数。
LOAD_TABLE_WRAPPER.BAT Table1 DEV
简而言之,它运行SQL以在Dev环境中加载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的最后两行
:eof
exit %ERROR_STATUS%
答案 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
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