Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 只有在文件尚未运行时才打开该文件的最佳做法是什么?_Batch File - Fatal编程技术网

Batch file 只有在文件尚未运行时才打开该文件的最佳做法是什么?

Batch file 只有在文件尚未运行时才打开该文件的最佳做法是什么?,batch-file,Batch File,我知道这看起来很简单,但我已经尝试了两种方法,但都不奏效。这种情况的特殊之处在于,我有一个由进入outlook的电子邮件触发的批处理文件。大多数情况下,电子邮件都是在同一时间触发的,因此Outlook可以一次收到10封电子邮件,因此在2秒内执行批处理文件10次。唯一的目标是在收到第一封电子邮件时打开一个excel文件,而对于此后的每封电子邮件,由于excel文件已经打开,因此不做任何操作 我尝试的第一种方法是通过尝试将文件复制到另一个位置来测试文件是否已打开: echo.N|copy /-y N

我知道这看起来很简单,但我已经尝试了两种方法,但都不奏效。这种情况的特殊之处在于,我有一个由进入outlook的电子邮件触发的批处理文件。大多数情况下,电子邮件都是在同一时间触发的,因此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"
)

然而,我得到同样的东西大概是出于同样的原因。有什么替代方案吗?

我认为您需要了解以下几点:

请看第一个回复:@dbenham,我们正在使用它,它的效果非常好!我们使用它来检查,以确保在压缩web日志文件之前,ApacheTomcat没有使用它们