将 TASKLIST 批处理到变量
Batch TASKLIST to variables
我想查找应用程序是否打开并获取其 PID。为此,我使用了
wmic process where name="notepad.exe" get ProcessId
如果有两个notepad.exe
打开,则显示2个PID。如果 2 个打开,我想 taskkill
个。我将如何处理这个。我如何检查是否有 2 个相同的命名进程(具有特定名称)同时打开?有什么方法可以将 tasklist
存储在列表中?
我想这就是你想要的:
@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
我想查找应用程序是否打开并获取其 PID。为此,我使用了
wmic process where name="notepad.exe" get ProcessId
如果有两个notepad.exe
打开,则显示2个PID。如果 2 个打开,我想 taskkill
个。我将如何处理这个。我如何检查是否有 2 个相同的命名进程(具有特定名称)同时打开?有什么方法可以将 tasklist
存储在列表中?
我想这就是你想要的:
@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