bat脚本设置同时只有一个在运行中

我做了一个小程序,给其他人使用,主体是用Python实现的,但是启动程序我写了一个bat脚本,因为bat脚本直接双击就能运行,也可以防止直接运行python程序结束会立马退出看不到最终结果的状态。

但是别人使用时,bat脚本有时候点的快了,或者忘了已经在运行,又双击运行就有问题了。因为这个程序不想被同一时间内同时被启动。

经过多次和不同大模型的交流,最终尝试出了一种可以检测当前脚本是否在运行的功能。大模型在这个场景下输出的内容和正确代码很接近了,但是还是有各种问题,所以这里记录一下我最终总结的代码。

原理是让bat脚本去检测当前所有程序中,name是cme.exe,且commandline中包含当前脚本路径的程序,并且让程序判断个数,在包含当前已执行程序的基础上,如果程序的个数大于等于2,就代表当前正在运行的程序是重复的。

@echo off
setlocal enabledelayedexpansion

:: 获取当前脚本的全路径
set "script_path=%~f0"
:: 转义反斜杠为双反斜杠(WMIC 要求)
set "script_path=%script_path:\=\\%"
:: 查询进程 这里的/value 很重要,这样才能用寻找processId的个数来计数
for /f %%a in ('wmic process where ^ "name='cmd.exe' and commandline like '%%%script_path%%%'" ^ get processid /value ^| find /c "ProcessId" ') do set "count=%%a"

if %count% geq 2 (
    echo 检测到当前程序已经在运行,不得重复执行
    pause
    exit /b
)
:: 正常执行代码--此处可以写后续的逻辑
echo 开始执行脚本...
pause

这种方式也可以应用到需要让程序一直在运行的场景,比如定时1分钟运行一次这个程序(此时就不要写pause暂停了)。如果程序已经在运行,就不会重复被执行,如果程序被意外关闭,定时任务又可以把这个程序打开来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值