Batch file 将任务列表批处理为变量

Batch file 将任务列表批处理为变量,batch-file,store,taskkill,tasklist,Batch File,Store,Taskkill,Tasklist,我想知道一个应用程序是否打开,并得到它的PID。为此,我使用 wmic process where name="notepad.exe" get ProcessId 如果有两个,notepad.exes打开,则显示2个PID。如果2打开,我想taskkill1。我该怎么做呢。如何检查一次是否有两个相同的命名进程(具有特定名称)打开?有没有办法将任务列表存储在列表中?我想这就是您想要的: @ECHO OFF SETLOCAL EnableDelayedExpansion SET /A I=0 S

我想知道一个应用程序是否打开,并得到它的PID。为此,我使用

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

如果有两个,
notepad.exe
s打开,则显示2个PID。如果2打开,我想
taskkill
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

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