Perl 脚本不等待 .bat 文件完成并继续执行

Posted

技术标签:

【中文标题】Perl 脚本不等待 .bat 文件完成并继续执行【英文标题】:Perl script is not waiting for a .bat file to complete and continuing execution 【发布时间】:2016-07-20 11:48:08 【问题描述】:

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

有没有一种方法可以暂停 perl 脚本的执行,直到 bat 文件执行完毕,然后在 bat 文件执行完毕后继续执行。

我是这样写的:

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

所以它甚至在 bat 文件完成之前打印 hello。

其实我想要完成的是:

    我的 bat 文件创建了一些文件 我想在 bat 文件完成后将这些文件复制到另一个位置。

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

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

【问题讨论】:

您是否使用了systemexecqx 或反引号` 是的,有。但这很大程度上取决于你在做什么。为此,我们需要一些代码示例。 是的,我使用了系统。我写了这样的东西:system("start $bat_file"); 【参考方案1】:

您需要删除start 命令

如果没有/wait 选项,start 将创建一个进程并立即返回

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

system($bat_file);

达到你想要的效果

【讨论】:

【参考方案2】:

您遇到的问题是start command 的问题,而不是system 的问题

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

你必须在start之后使用/wait 在您的代码中它将是:

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

Start Manual

【讨论】:

当我使用你提到的代码时,即使在bat文件完成后,调用也永远不会返回给调用者。它只是保持挂起状态,并且在 bat 文件完成后永远不会恢复操作。但是,如果我写 system($bat_file);

以上是关于Perl 脚本不等待 .bat 文件完成并继续执行的主要内容,如果未能解决你的问题,请参考以下文章

我的 perl 脚本如何调用和执行并后处理它

Perl - 需要在上一行完成之前继续下一行

dos下执行bat文件,如何让两个命令之间自动延迟3秒后再继续执行?

Perl 的 `system` 怎么能不等待完成而继续。

bat脚本中使用gradle或maven等外部命令后,脚本不继续执行,直接退出

bat脚本中使用gradle或maven等外部命令后,脚本不继续执行,直接退出