在windows中使用管道和taskkill用pid杀死进程
Posted
技术标签:
【中文标题】在windows中使用管道和taskkill用pid杀死进程【英文标题】:kill processes with pid using pipes and taskkill in windows 【发布时间】:2022-01-17 05:07:06 【问题描述】:我是批处理脚本的新手,我试图搜索和终止进程列表,但不确定如何在第二个管道之后继续进行
@echo off
wmic process where "Name like 'java%%.exe' " get Processid, Caption, Commandline | find "abc" |
这里我使用 WMIC 列出所有 java 进程并使用 find 过滤它们以在命令行中获取具有特定单词的 java 进程,现在我需要在找到它们后杀死这些进程。这可以通过 taskkill 或在将其写入文件后使用 for 循环来实现吗?我不想使用 call Terminate 来终止进程。有人可以帮我弄这个吗。提前致谢。
【问题讨论】:
是的,您可以使用for /F
循环处理%SystemRoot%\System32\find.exe
的输出,以处理在后台启动的cmd.exe
实例的STDOUT
以处理命令行。使用带有for /F "usebackq delims=" %%I in (`%SystemRoot%\System32\wbem\wmic.exe PROCESS where "Name like 'java.exe'" GET ProcessId^,Caption^,CommandLine ^| %SystemRoot%\System32\find.exe "abc"`) do echo %%I
的批处理文件来查看要处理的行。然后在命令提示符窗口for /?
中运行并阅读输出帮助以了解如何使用tokens=
和delims=
自定义for /F
。
最好让wmic.exe
过滤在CommandLine
值内包含特定字符串(如abc
)的java.exe
实例,并让wmic
仅输出ProcessId
使用选项/Format:VALUE
在wmic.exe
参数列表的末尾,以便使用for /F
更轻松地处理输出。但请注意,wmic.exe
使用 UTF-16 LE + BOM 以 Unicode 输出,for /F
无法真正正确处理。 find.exe
可用于获取以 ASCII 格式输出的进程标识符,以便使用 for /F
进行处理。
感谢您的回答!我在浏览了一些文档后想出了这个,这会工作吗? @echo off wmic process where "Name like 'java%%.exe'" get Processid,Caption,Commandline for /F "skip=1 tokens=*" %%a in ('wmic process where "Name like 'java%% .exe' 和命令行如 '%%UAT%%' "get Processid^| findstr /r /v "^$"') 做 ( echo Killing UAT Process id %%a TASKKILL /f /pid %%a )跨度>
【参考方案1】:
这首先通过 .exe 名称查找进程,然后在获知进程 ID 后查看这些进程的命令行:
@echo off
setlocal ENABLEEXTENSIONS DISABLEDELAYEDEXPANSION
set exe=winver.exe
set findcommand=foo bar
REM start example programs
start "" "%exe%" %findcommand%
start "" "%exe%" %findcommand% baz
ping -n 3 localhost>nul&rem SLEEP
for /F "tokens=2 delims==" %%A in ('wmic process where "Name like '%exe%'" get ProcessID /format:list') do for /F "tokens=1,* delims==" %%B in ('wmic process where "ProcessID like '%%A'" get commandLine /format:list') do for /F %%D in ("%%~B") do (
(echo.%%C|find /I "%findcommand%" >nul)&&call taskkill /PID %%A
)
如果命令行包含 echo
不喜欢的内容,我确信有办法解决这个问题,但批处理文件就是这样......
【讨论】:
以上是关于在windows中使用管道和taskkill用pid杀死进程的主要内容,如果未能解决你的问题,请参考以下文章
Windows 批处理文件 - 如果窗口标题包含文本,则 taskkill