lan*_*nce 2 windows batch-file single-instance
:: dostuff.bat
@echo off
:: insert long-running process call here
: End
Run Code Online (Sandbox Code Playgroud)
如果它在执行时已经在另一个进程中运行,我可以添加到此批处理文件中以使其终止?
好吧,如果只有一个实例,那么你可以通过在某个地方创建一个虚拟文件来实现这一点,可能在temp目录中:
copy NUL "%TEMP%\dostuff_is_doing_stuff.tmp"
Run Code Online (Sandbox Code Playgroud)
然后在完成后将其删除:
del "%TEMP%\dostuff_is_doing_stuff.tmp"
Run Code Online (Sandbox Code Playgroud)
在批处理文件的开头,您可以检查该文件是否存在并相应地退出:
if exist "%TEMP%\dostuff_is_doing_stuff.tmp" (
echo DoStuff is already running. Exiting ...
exit /b 1
)
Run Code Online (Sandbox Code Playgroud)
同样,您可以通过更改窗口标题来实现这一点,窗口标题对于Ctrl+ C'ed或崩溃的批处理文件也应该更加健壮.
设置标题:
title DoStuff
Run Code Online (Sandbox Code Playgroud)
之后重新设置:
title Not doing stuff
Run Code Online (Sandbox Code Playgroud)
检查一下:
tasklist /FI "WINDOWTITLE eq DoStuff"
Run Code Online (Sandbox Code Playgroud)
但是,这有一个问题:当cmd以管理员身份运行时,您将获得"Administrator:DoStuff"作为标题.哪个不再匹配了tasklist.您也可以通过检查"Administrator:DoStuff"来解决它,但根据Windows UI语言可能会有所不同,因此它可能不是最佳解决方案.
| 归档时间: |
|
| 查看次数: |
5271 次 |
| 最近记录: |