任务列表按多个PID过滤

时间:2016-12-14 08:18:14

标签: filter cmd find tasklist

我正在使用tasklist命令。

我正在尝试使用/fi选项来过滤多个PID。

尝试

tasklist.exe /v /fi "PID eq 3248" /fi "PID eq 9488"

结果

INFO: No tasks are running which match the specified criteria.

不起作用。我只能假设过滤器是使用逻辑进行内部评估的,而且显然永远不会是真的。

问题

如何按多个PID过滤?

丑陋的替代方案1

如果我单独运行它,结果就可以了,我可以设置过程信息。但是,

  • tasklist.exe /v /fi "PID eq 3248"
  • tasklist.exe /v /fi "PID eq 9488"

我想避免激活两个单独的命令。

丑陋的替代方案2

使用find

tasklist.exe /v  | find /i "9488"

带来了问题:

  1. 如何找到多个PID?
  2. 如何确保找到的字符串确实是PID而不是其他任何内容。

2 个答案:

答案 0 :(得分:4)

tasklist无法过滤到多个PID。因此,请使用完整输出并使用其他方法进行过滤:

使用csv作为输出格式; PID是token2,windowtitle是token9 findstr能够搜索多个字符串(此处用空格分隔) /x检查“完整行”,因此453456不匹配 >nul抑制findstr的输出(我们只需要错误级别,而不是实际输出) &&充当“如果先前的命令(findstr)成功,那么......”

@echo off
for /f "tokens=2,9 delims=," %%a in ('tasklist /v /fo csv') do (
  echo %%~a|findstr /x "3248 9488" >nul && echo %%~a    %%~b
)

答案 1 :(得分:1)

PowerShell解决方案

[regex]$Pid='(75068|6712)'
Get-Process |where {$_.mainWindowTItle -and $_.ID -match $Pid} |select ID,MainWIndowtitle

输出

   Id MainWindowTitle
   -- ---------------
75068 cmd - tasklist to filter by multiple PIDs - Stack Overflow - Mozilla Firefox
 6712 VmUbuntu-1604lts [wird ausgeführt] - Oracle VM VirtualBox
相关问题