Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 从另一个.BAT文件调用.BAT文件_Batch File - Fatal编程技术网

Batch file 从另一个.BAT文件调用.BAT文件

Batch file 从另一个.BAT文件调用.BAT文件,batch-file,Batch File,我有一个.bat文件,可以向其中传递参数 LOAD_TABLE_WRAPPER.BAT Table1 DEV 简单地说,它运行SQL在开发环境中加载表1。现在,我想让它在一夜之间加载多个表。所以,我设置了一个master.BAT,类似于 ::MASTER_LOAD.BAT CALL LOAD_TABLE_WRAPPER.BAT Table1 Dev CALL LOAD_TABLE_WRAPPER.BAT Table2 Dev CALL LOAD_TABLE_WRAPPER.BAT Table3

我有一个.bat文件,可以向其中传递参数

LOAD_TABLE_WRAPPER.BAT Table1 DEV
简单地说,它运行SQL在开发环境中加载表1。现在,我想让它在一夜之间加载多个表。所以,我设置了一个master.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%

您应该使用start命令来解决此问题。调用使当前进程运行这些命令。您可以了解有关启动基本实现的更多信息,具体如下:

"START program-name arg1 arg2"`

执行调用LOAD_TABLE_WRAPPER.BAT Table1 Dev时是否有问题?当您在两次调用之间进行回显时,结果是什么?

您的LOAD\u TABLE\u WRAPPER.BAT中的
退出%error\u status%
命令将终止您的批处理会话,因此您的MASTER\u LOAD.BAT永远没有机会在下次调用时继续

只需将/B选项添加到EXIT命令中,即可解决此问题

exit /b %error_stats%
我几乎从不在批处理文件中使用EXIT without/B(尽管有时不需要/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
两种方法之间有许多不同之处

退出呼叫/B

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

  • 比较慢
  • 返回时无法保留环境变量值。(您可以将定义写入文件,并在返回主控时将其加载回,但这既不方便也不高效)
  • 被调用的脚本总是以默认的延迟扩展和扩展状态开始(通常延迟扩展被禁用,扩展被启用)

除非调用的批处理文件有EXIT(退出)而没有/B选项,并且您无法修改批处理文件以添加/B选项,否则我不会建议使用CMD/C over CALL。

尝试发出暂停命令,如下所示:

调用LOAD\u TABLE\u WRAPPER.BAT Table1 Dev
暂停
调用LOAD_TABLE_WRAPPER.BAT Table2 Dev
暂停
调用LOAD_TABLE_WRAPPER.BAT Table3 Dev