:: dostuff.bat
@echo off
:: insert long-running process call here
: End

如果该批处理文件在执行时已经在另一个进程中运行,我可以添加什么使其终止?

最佳答案

好吧,如果曾经只有一个实例,那么您可以通过在某个地方(可能在temp目录中)创建一个虚拟文件来实现此目的:

copy NUL "%TEMP%\dostuff_is_doing_stuff.tmp"

完成后,您可以将其删除:
del "%TEMP%\dostuff_is_doing_stuff.tmp"

在批处理文件的开头,您可以检查该文件是否存在并相应退出:
if exist "%TEMP%\dostuff_is_doing_stuff.tmp" (
    echo DoStuff is already running. Exiting ...
    exit /b 1
)

同样,您可以通过更改窗口标题来做到这一点,它对于Ctrl + C或崩溃的批处理文件也应该更健壮。

设置标题:
title DoStuff

之后重新设置:
title Not doing stuff

检查一下:
tasklist /FI "WINDOWTITLE eq DoStuff"

但是,这有一个问题:当cmd以管理员身份运行时,您将获得“Administrator:DoStuff”作为标题。与tasklist不再匹配。您还可以通过检查“Administrator:DoStuff”来破解它,但根据Windows UI语言的不同,外观可能有所不同,因此它可能不是最佳解决方案。

10-05 21:15
查看更多