如何使用wmic查找进程pid并使用taskkill将其杀死

Pat*_*k S 4 newline batch-file wmic

我需要使用WMIC命令找到进程PID,然后使用taskkill终止此进程.我几乎实现了这一点,但唯一的问题是PID变量的结尾有一个换行符.到目前为止我做了这个:

c:\patryk>for /F "skip=1 tokens=*" %a in ('wmic process where "CommandLine like '%sourceprocessor%' and name like '%java%'" get ProcessId') do taskkill /pid | set /p pid=%a
Run Code Online (Sandbox Code Playgroud)

所以这是循环wmic的输出,包含3行:title(ProcessId),找到PID(一个数字)和一个空行.我正在跳过第一线,因为它只是标题.现在我要杀死在第二行找到pid的进程.并且有一个问题,它在行尾有一个换行符,所以整个命令不起作用.任何人都可以给我一些建议我怎样才能实现这一目标?如何删除此换行符?

MC *_* ND 5

for /F "skip=2 tokens=2 delims=," %a in (
  'wmic process where " .... " get ProcessID^,Status /format:csv'
) do taskkill /pid %a
Run Code Online (Sandbox Code Playgroud)

现在你有一个来自wmicaditional行的输出(从这里跳过),字段用逗号(delim)分隔,并包括三个字段:自动添加的节点(computername),processid(第二个)令牌)和最终状态字段,不会被使用,但允许我们检索行中没有结束CR的第二个令牌

或者您可以for在初始行添加aditional 命令

for /f ... %a in ( ... ) do for %b in (%a) do taskkil /pid %b
Run Code Online (Sandbox Code Playgroud)

此附加for循环将从%a中检索到的wmic数据中删除CR字符.

  • 谢谢您的回答.这个解决方案有效,但我发现更容易了.当我们寻找这样一个难以杀死进程的方法时,事实证明它非常简单:`wmic进程,其中"CommandLine如'%sourceprocessor%'和名称'%java%'"调用terminate`完成工作:) (4认同)
  • @PatrykS,只需一张便条.`taskkill`(没有`/ f`)向目标进程发送一个'wm_close`消息,要求它关闭.`wmi Terminate`方法不是那么温和,直接杀死了这个过程.如果不存在丢失数据的风险,那么,更好的方法是从`taskkill`开始,如果一段时间后进程仍然在运行,那么使用`taskkill/f`或`wmi terminate`来确保这个过程结束了. (3认同)