【问题标题】:Batch TASKLIST to variables批处理 TASKLIST 到变量
【发布时间】:2017-09-18 11:13:47
【问题描述】:

我想查看应用程序是否打开并获取它的 PID。为此,我使用了,

wmic process where name="notepad.exe" get ProcessId

如果有两个 notepad.exes 打开,则显示 2 个 PID。如果 2 个打开,我想 taskkill 一个。我将如何做到这一点。如何检查一次是否有 2 个相同命名的进程(具有特定名称)打开?有没有办法可以将tasklist 存储在列表中?

【问题讨论】:

  • 如何决定杀哪一个?
  • 我暂时不介意。稍后,我可以设置一个自定义窗口标题,然后相应地关闭,但现在我想要任何一个。 @zb226
  • 无需在任意数量的相同进程之间进行选择,因为您只需要终止具有已定义窗口标题的单个进程。因此,这应该是您的问题。

标签: batch-file store taskkill tasklist


【解决方案1】:

我想这就是你想要的:

@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET /A I=0
SET PIDS=
FOR /F "tokens=*" %%G IN ('wmic process where name^="notepad.exe" get ProcessId ^| FINDSTR /v ProcessId ^| FINDSTR /r /v "^$"') DO (
    SET /A I=I+1
    SET PIDS=!PIDS!%%G,
    SET PIDS=!PIDS: =!
)
SET PIDS=!PIDS:~1,-1!
ECHO Found %I% processes
ECHO PIDs: %PIDS%

它将进程计数和 PID 输出为逗号分隔的列表。如果我针对chrome.exe 运行它,这是输出:

C:\tmp>q46277950.bat
Found 12 processes
PIDs: 1696,5668,11644,4240,1624,4284,15076,15236,2816,11388,5652,5840

【讨论】:

    猜你喜欢
    • 2011-07-07
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多