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文件的时间不是固定的,每次都会变化。
【问题讨论】:
您是否使用了system
、exec
、qx
或反引号`
?
是的,有。但这很大程度上取决于你在做什么。为此,我们需要一些代码示例。
是的,我使用了系统。我写了这样的东西: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 文件完成并继续执行的主要内容,如果未能解决你的问题,请参考以下文章
dos下执行bat文件,如何让两个命令之间自动延迟3秒后再继续执行?