2016-07-20 188 views
1

我正在从perl脚本调用bat文件。
由于bat文件需要很长时间才能执行,因此perl脚本不会等待bat文件完成并继续从下一行开始执行。Perl脚本不会等待.bat文件完成并继续执行

有没有一种方法可以暂停执行perl脚本,直到bat文件完成执行,然后在bat文件完成后再恢复。

我写了这样的事情:

system ("start $bat_file"); 
print ("Hello"); 

所以打印Hello bat文件结束之前就。

其实我想做到的是:

  1. 我的bat文件创建一些文件
  2. 我想一旦bat文件做是为了将这些文件复制到另一个位置。

但是,因为它不等待bat文件完成,所以复制失败,因为它试图复制一个不存在的文件夹,因为bat文件仍在处理中,并且没有生成输出文件。

注意:完成bat文件的时间不固定,每次都会更改。

+2

影响你使用'system','exec','qx'或反引号'\''? – simbabque

+1

是的,有。但这取决于你在做什么。为此,我们需要一些代码示例。 – Sobrique

+0

是的,我用过系统。 我写了这样的: system(“start $ bat_file”); –

回答

9

您需要删除start命令

没有/wait选项,start会创建一个流程并立即返回

但是根本不需要start。你可以写只是

system($bat_file); 

以达到你要求

+0

它工作。谢谢你的帮助。 –

2

,你必须与start command的问题,而不是与system

当你在Windows上使用start命令时,将启动程序,但不会等待结束的问题。

你有start
在您的代码后使用/wait这将是:

system ("start /wait $bat_file"); 
print ("Hello");` 

Start Manual

+1

根本无法使用'start'。 – Borodin

+1

当我使用您提到的代码时,即使bat文件完成后,调用也不会返回给调用者。它只是保持暂停状态,并且在bat文件完成后从不恢复操作。 但是,如果我编写系统($ bat_file),它正在工作; –

相关问题