繁体   English   中英

如何检查批处理文件是否运行并避免双重执行?

[英]How to check if a batch file runs and avoid a dual execute?

我想制作一个批处理脚本,但我想避免双重执行。 所以我试图检查它是否正在运行。

我使用了以下方法,但我ERROR: The process "MyBatchTool" not foundERROR: The process "MyBatchTool" not found消息ERROR: The process "MyBatchTool" not found

echo off
TITLE MyBatchTool
SETLOCAL ENABLEDELAYEDEXPANSION
tasklist /fi "imagename eq MyBatchTool" |find ":" > nul
if errorlevel 1 echo "Is Running"
pause

你有什么建议吗 ?

echo off
TITLE MyBatchTool
SETLOCAL ENABLEDELAYEDEXPANSION
tasklist /fi "imagename eq MyBatchTool" 2>nul |find ":" > nul 2>nul && (
   echo "Is not Running"
   color
)||(
    echo "Is running"

)
pause

您可以使用文件锁,即使出现错误,批处理文件退出时,该锁也会被删除。
而且只有一个进程可以持有该锁,这是安全的。

2> nul (
    9> lock.tmp 2>&1 (
    call :main
    ) || ( echo Is still runiing )
)
exit /b

:main
echo This will only run in one instance
ping -n 10 localhost

第一部分是用于创建排他锁文件。 当您尝试再次运行批处理时, 2>nul阻止错误消息。

有关更多示例和描述,您可以在SO或dostips.com上搜索dbenham关于该主题的帖子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM