我知道这看起来很简单,但我已经尝试了两件事,但都没有奏效。这种情况的特殊之处在于我有一个由电子邮件触发的批处理文件。大多数情况下,电子邮件会在同一时间触发,因此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"
)
然而,由于同样的原因,我得到同样的东西。有没有其他选择?
答案 0 :(得分:0)
我认为您需要查看以下内容:
How to check in command-line if a given file or directory is locked (used by any process)?
看看我们正在使用的@dbenham的第一个回复,效果太棒了!我们使用它来检查以确保在我们压缩之前Apache Tomcat没有使用Web日志文件。