bat批处理实现软件重启功能
- windows环境
- 需要明确的概念
- 按照启动文件xxx.exe去定位某个程序的Pid
- 根据pid杀死某个进程
- 根据exe文件启动某个软件
- bat示例,杀死软件进程并重启
windows环境
我这里用的是win10企业版,在基础功能上和家庭版区别不大
需要明确的概念
按照启动文件xxx.exe去定位某个程序的Pid
软件的icon名称和实际运行进程中的imagename可能是不一样的,我这里来举个例子,可以看到我的右下角这个软件叫Cisco AnyConnect
但是在任务管理器中,找不到这个名称的软件,又换成了另一个名称,前缀一样,后缀不一样。所以我这里统一找的办法就是,右键这个软件,点开它的properties
再点开details查看最下面的Original filename字段值,可以看到叫vpnui.exe
我们拿着这个名称到cmd中去执行命令
tasklist /fi "imagename eq vpnui.exe
可以看到能找到以下的进程pid
根据pid杀死某个进程
这里的18880就是对应刚刚查出来的PID
taskkill /pid 18880 -t -f
根据exe文件启动某个软件
start命令后面的就是你的exe启动文件路径
start C:\Users\RAY\DiskD\WorkSoftwares\cisco connect\vpnui.exe
bat示例,杀死软件进程并重启
这里我用px这个软件做为演示,px这个软件启动后会有3个进程,所以我这里用了数组保存这三个进程的pid,而当我kill掉其中一个pid的时候,其余进程也会随之被kill掉,所以我这里只需要kill掉obj[0]进程就可以了,大家可以适当根据自己的需求做调整
restartpx.bat
@echo off
setlocal enabledelayedexpansion
set /a objIndex=0
set obj[0]=0
set obj[1]=0
set obj[2]=0
for /f "skip=3 tokens=2 delims= " %%a in ('tasklist /fi "imagename eq px.exe"') do (
echo echo ------!objIndex!------
set obj[!objIndex!]=%%a
set /a objIndex+=1
)
if (%obj[0]%)==(0) (
echo px progress isn't running.
start C:\Users\RAY\DiskD\WorkSoftwares\px-v0.8.3-windows\px.exe
)else (
echo px is running.
echo kill px progress......;
taskkill /pid %obj[0]% -t -f
timeout /t 1
echo px has been killed.
echo start px ......
timeout /t 2
start C:\Users\RAY\DiskD\WorkSoftwares\px-v0.8.3-windows\px.exe
)
echo px has been restarted.
timeout /t 3