首页 > 解决方案 > 从 tasklist 命令获取 PID

问题描述

我正在使用任务列表为我提供有关在我的 Windows Server 上运行的特定服务/进程的信息。

命令:

tasklist /svc /fi "SERVICES eq .Service02"

输出:

Image Name           PID      Services
================== ======== ============================================
app02.exe           15668    .Service02

我现在在 StackOverflow、其他论坛以及 Windows Docs 上搜索了很长时间,但我无法弄清楚如何获得所需的输出,即:

15668

我设法做了一个有效的命令,但不是真的......

for /f "tokens=1,2 delims= " %A in ('tasklist /svc /fi "SERVICES eq .Service02"') do echo %B

这并没有给我想要的输出 - 相反,它给了我以下输出:

C:\Users\admin>echo Name
Name

C:\Users\admin>echo ========
========

C:\Users\admin>echo 15668
15668

如果我只能做一些只与第三行相呼应的事情。输出正是我需要的。PID。

所以,我需要一个命令,它会带上我提供的服务正在使用的进程的名称,并且只返回它的 PID。

请问,有人可以帮我吗?

编辑:感谢@Squashman,我设法执行了一个新命令:

tasklist /svc /fi "SERVICES eq .Service02" /FO csv /NH
"service02.exe","15668",".Service02"

现在输出是:

"service02.exe","15668",".Service02"

但我从这里去哪里?

标签: windowsbatch-filecmdpidtasklist

解决方案


只需使用for /F循环来捕获tasklist命令的 CSV 输出并提取正确的标记。

在命令提示符中:

@for /F "tokens=2 delims=," %P in ('tasklist /SVC /FI "Services eq .Service02" /FO CSV /NH') do @echo %~P

在批处理文件中:

@echo off
for /F "tokens=2 delims=," %%P in ('
    tasklist /SVC /FI "Services eq .Service02" /FO CSV /NH
') do echo %%~P

-~修饰符从 PID 值中删除周围的引号。


推荐阅读