在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:VALUEwmic.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 检测进程pid

Windows 批处理文件 - 如果窗口标题包含文本,则 taskkill

使用 taskkill 停止 windows 服务

windows命令——taskkill

Windows START命令无法使用Jenkins Pipeline

Window 中杀死指定端口 cmd 命令行 taskkill