情景:开发的程序,当多个用户同时使用下载证书的时候,会产生很多winword.exe进程(他并没有自动释放,有20个以上),导致后面无法正常下载证书。于是乎想到这个方法
for /F %%i in ( 'tasklist ^| findstr winword.exe ^| find /c /v "" ') do ( set commitid=%%i)
set /a limitNum=10
set /a winwordNum=%commitid%
echo %winwordNum%
if "%winwordNum%" gtr "%limitNum%" (
taskkill /f /im winword.exe
)
::winword.exe超过10个,则将其全部杀死
::使用任务计划程序,每隔1分钟调用本bat脚本
其中踩到的坑:
1、batch的执行语句后结果赋值,推荐使用for来操作赋值给变量。
2、tasklist 后面的 | 符号,要变成 ^| 转义,否则报语法错误。
3、如果写错语法,你就算结尾加上pause,他双击执行后 会照样一闪而过。
4、if 对比的时候, 加双引号,然后采用%var% 都用变量的形式来对比。之前用变量和纯数字对比不懂为啥,没有执行if体里面的语句。
参考资料: