如果文件尚未运行,最佳做法是什么?

时间:2015-08-11 17:17:23

标签: batch-file

我知道这看起来很简单,但我已经尝试了两件事,但都没有奏效。这种情况的特殊之处在于我有一个由电子邮件触发的批处理文件。大多数情况下,电子邮件会在同一时间触发,因此Outlook可以同时接收10封电子邮件,因此在2秒的时间内执行批处理文件10次。唯一的目标是在第一封电子邮件进入时打开一个excel文件,此后每封电子邮件都不执行任何操作,因为excel文件已经打开。

我尝试的第一种方法是通过尝试"复制"来测试文件是否打开。它到另一个地方:

echo.N|copy /-y NUL "P:\Pricing\Pricing Templates\Pricing Models\trial\LP3 Model vcongestion outlook.xlsm">NUL&&(
echo.LP3 Model v7c.xlsm is free!
start excel  "LP3 Model vcongestion outlook.xlsm"
) || (
echo.LP3 Model vcongestion outlook.xlsm is in use!
)  

这有时候,但并不总是有效,因为在第一个文件执行的时间和文件打开的时间之间可能有1秒的缓冲区因此被锁定以进行复制。因此,我试图简单地测试Excel的应用程序是否打开

tasklist /nh /fi "imagename eq EXCEL.exe" | find /i "EXCEL.exe" > nul &&(
echo found
)|| (
start excel "P:\Pricing\Pricing Templates\Pricing Models\trial\LP3 Model vcongestion outlook.xlsm"
)

然而,由于同样的原因,我得到同样的东西。有没有其他选择?

1 个答案:

答案 0 :(得分:0)

我认为您需要查看以下内容:

How to check in command-line if a given file or directory is locked (used by any process)?

看看我们正在使用的@dbenham的第一个回复,效果太棒了!我们使用它来检查以确保在我们压缩之前Apache Tomcat没有使用Web日志文件。