我正在使用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过滤?
如果我单独运行它,结果就可以了,我可以设置过程信息。但是,
tasklist.exe /v /fi "PID eq 3248"
tasklist.exe /v /fi "PID eq 9488"
我想避免激活两个单独的命令。
使用find
tasklist.exe /v | find /i "9488"
带来了问题:
答案 0 :(得分:4)
tasklist
无法过滤到多个PID。因此,请使用完整输出并使用其他方法进行过滤:
使用csv
作为输出格式; PID是token2,windowtitle是token9
findstr
能够搜索多个字符串(此处用空格分隔)
/x
检查“完整行”,因此45
与3456
不匹配
>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