按多个 PID 过滤的任务列表

tasklist to filter by multiple PIDs

我正在使用 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

如果我单独运行,结果就OK了,我可以设置进程信息了。然而,

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

丑陋的选择 2

使用find

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

带来的问题:

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

tasklist 无法过滤到多个 PID。所以使用全量输出,用另一种方法过滤:

使用csv作为输出格式; PID是token2,windowtitle是token9.
findstr 可以搜索多个字符串(此处以空格分隔)。
/x 检查 "complete line",因此 45 不会匹配 3456.
>nul 抑制 findstr 的输出(我们只需要错误级别,而不是实际输出)
&& 充当 "if previous command (findstr) was successful, then..."

@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
)

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