:: 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语言的不同,外观可能有所不同,因此它可能不是最佳解决方案。