如何从命令行获取PID,通过用户名和图像名称过滤

我需要能够使用命令行从正在运行的进程(cmd.exe)获取PID。 问题是有两个cmd.exe运行。 一个是在用户名SYSTEM下,另一个是compUser。 有没有办法,我可以抓住compUser cmd.exe的PID?

编辑:这需要进一步的解释。 我正在从batch file中执行此操作。 我在batch file中调用的一个调用会启动一个不会死的cmd.exe。 所以杀死cmd.exe会很简单:

taskkill /F /IM cmd.exe /FI "username eq compUser" 

问题是我所在的batch file正在由用户名compUser下的另一个cmd.exe实例处理。 我试图做的是从第一个cmd.exe获取PID,然后再启动第二个cmd.exe。 这样我可以使用这个命令:

 taskkill /F /IM cmd.exe /FI "username eq compUser" /FI "PID neq [orignal task's PID]" 

Solutions Collecting From Web of "如何从命令行获取PID,通过用户名和图像名称过滤"

这将显示用户“compUser”的所有名为“cmd.exe”的进程:

 tasklist /FI "IMAGENAME eq cmd.exe" /FI "USERNAME eq compUser" 

我最终不得不这样做的方式是使用:

 TASKLIST /NH /FI "IMAGENAME eq cmd.exe" /FI "username eq compUser"> psid.txt FOR /F "tokens=2" %%I in (psid.txt ) DO set pIdNotToKill=%%I 

就在我开始挂起的批处理脚本之前。 然后当我准备杀掉悬挂的cmd窗口时:

 taskkill /F /IM cmd.exe /FI "PID ne %pIdNotToKill%" /FI "username eq compUser" 

可能有更好的方法,但这个工作。

我把标题设置到我自己的cmd窗口,其他cmd窗口我调用或运行“开始/ b”我重命名为其他窗口标题名称。 接下来我检测PID,设置MYPID并杀死所有其他的我的。

所有在一个文件,工作在其他标签循环超时达赖。

 @(@Title TitleOfMyScript) for /f "tokens=2" %%a in ('tasklist /fi "imagename eq cmd.exe" /fi "windowtitle eq TitleOfMyScript" /nh') do set MYPID=%%a taskkill /FI "PID ne %MYPID%" /FI "IMAGENAME eq cmd.exe" /F 

我只想分享我的一段代码,也许这对某个人有用。 它是基于jiggawagga的评论,但它可以终止许多过程:

 @ECHO off SETLOCAL ENABLEDELAYEDEXPANSION REM kill old server process SET pIdNotToKill= SET pIdFilter= FOR /F "tokens=2" %%I IN (%SERVER_HOME%\psid.txt) DO ( IF NOT "%%I"=="No" ( SET pIdNotToKill=!pIdNotToKill! %%I SET pIdFilter=!pIdFilter! /FI "PID ne %%I" ) ) IF NOT "!pIdNotToKill!"=="" ( ECHO Killing all Java processes except%pIdNotToKill% ECHO TASKKILL command will be called with the filter%pIdFilter% TASKKILL /F /IM java.exe %pIdFilter% ) DEL %SERVER_HOME%\psid.txt TASKLIST /NH /FI "IMAGENAME eq java.exe" > %SERVER_HOME%\psid.txt 

在我开始服务器进程之前。