我有一个.bat文件,我可以传递参数.
LOAD_TABLE_WRAPPER.BAT Table1 DEV
Run Code Online (Sandbox Code Playgroud)
简而言之,它运行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
Run Code Online (Sandbox Code Playgroud)
如果我从cmd提交MASTER_LOAD.BAT,它会执行Table1的加载,但不会继续加载Table2.这是WRAPPER.BAT的最后两行
:eof
exit %ERROR_STATUS%
Run Code Online (Sandbox Code Playgroud)
您exit %error_status%在LOAD_TABLE_WRAPPER.BAT中的命令正在终止批处理会话,因此您的MASTER_LOAD.BAT永远不会有机会在下次调用时继续.
只需在EXIT命令中添加/ B选项即可解决问题
exit /b %error_stats%
Run Code Online (Sandbox Code Playgroud)
我几乎从不在批处理文件中使用没有/ 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
Run Code Online (Sandbox Code Playgroud)
这些方法之间存在许多差异
用EXIT/B打电话
CMD/C.
我绝不会建议使用CMD/C而不是CALL,除非被调用的批处理文件在没有/ B选项的情况下具有EXIT,并且您无法修改批处理文件以添加/ B选项.
您应该使用启动命令来解决此问题。调用使当前进程运行命令。您可以在此处了解有关开始的更多信息。基本实现应该是:
"START program-name arg1 arg2"`
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6737 次 |
| 最近记录: |