最近碰到一个程序居然无法通过taskkill /f /t /im xxx.exe来结束进程
想用PID形式结束但PID每次都是变动的,网上很多写法都是查找PID然后,,,眼看,手动!~
翻烂了互联网,找到了蜗牛大人
解释说明:
bat根据exe行程查询进程,对比脚本执行目录。获取当前脚本目录下的xxx.exe的进程ID
wmic process where name="xxx.exe" get processid,executablepath| findstr /C:%url%
注意在bat中 for中的 wmic语句要么使用“”将语句括起来或者使用^符号将“=”,“,”,“|”符号转义一下,否则在执行时会作为分隔符将语句分割而导致报错。如:
“wmic process where name="xxx.exe" get processid,executablepath| findstr /C:%url%”
或
wmic process where name^="xxx.exe" get processid^,executablepath^| findstr /C:%url%
tokens=1,2 代表获取第一列 第二列的数据 tokens=1-5 获取1到5列的数据
通过taskkill /f /pid pid关闭这个进程
@ping 127.0.0.1 -n 3 >nul 直行等待3s
@echo off
set url_all=""
set pid=0
set url="%~dp0\xxx.exe"
for /f "tokens=1,2" %%a in ('"wmic process where name="xxx.exe" get processid,executablepath| findstr /C:%url%"') do (
set url_all=%%a
set pid=%%b
echo %%a
echo %%b
)
taskkill /f /pid %pid%
@ping 127.0.0.1 -n 3 >nul
set path=%~dp0
start %path%xxx.exe
pause来个简化的
@echo off
for /f "tokens=2" %%a in ('tasklist^|find /i "xxx"') do (set pid=%%a)
echo "%PID%"
taskkill /f /pid %pid%
pause 再一个
@echo off
for /f "tokens=2 delims=," %%a in ('tasklist /fo csv^|findstr /i /c:"xxx.exe"') do set PID=%%a
echo PID为:%PID:~1,-1%
taskkill /f /pid %pid%
pausebat 搜索进程名并kill
@echo off
set/p "target=nginx(进程名:这里以nginx为例)"
if not defined target (
set "target=nginx"
)
set "list=tasklist /fi "imagename eq %target%.exe""
%list%
set/p "yn=是否继续Y/N(默认Y): "
set "Yy=Y y"
if not defined yn (
set "yn=Y"
)
for %%a in (%Yy%) DO (
if "%%a"=="%yn%" (
for /f "tokens=2 " %%y in ('%list% /nh') do (
REM echo %%y
taskkill /F /PID %%y
)
)
)