如何使用wmic查找进程pid并使用taskkill将其杀死

时间:2014-09-02 11:12:41

标签: batch-file newline wmic

我需要使用WMIC命令找到进程PID,然后使用taskkill终止此进程。我几乎实现了这一点,但唯一的问题是PID变量末尾有换行符。 到目前为止,我做到了这一点:

c:\patryk>for /F "skip=1 tokens=*" %a in ('wmic process where "CommandLine like '%sourceprocessor%' and name like '%java%'" get ProcessId') do taskkill /pid | set /p pid=%a

所以这是循环wmic的输出,包含3行:title(ProcessId),找到PID(一个数字)和一个空行。我跳过第一线,因为它只是标题。现在我要杀死在第二行找到pid的进程。并且有一个问题,它在行尾有一个换行符,所以整个命令不起作用。 任何人都可以给我一些建议我怎样才能实现这一目标?如何删除此换行符?

2 个答案:

答案 0 :(得分:5)

for /F "skip=2 tokens=2 delims=," %a in (
  'wmic process where " .... " get ProcessID^,Status /format:csv'
) do taskkill /pid %a

现在你有一个来自wmic的输出,在开头有一条aditional行(从这里跳过),字段用逗号分隔(delim),包括三个字段:节点(computername)是自动添加,processid(第二个令牌)和最终状态字段,不会被使用,但允许我们检索行中没有结束CR的第二个令牌

或者您可以在初始行添加aditional for命令

for /f ... %a in ( ... ) do for %b in (%a) do taskkil /pid %b

此aditional for循环将从%a中检索到的wmic数据中删除CR字符。

答案 1 :(得分:1)

我遇到了类似的问题,我只能知道正在运行的文件的名称才能停止任务。解决方案是:

for /f "tokens=2 delims=," %%a in (
    'wmic service get name^,pathname^,state /format:csv ^| findstr /i /r /c:"SomeServer\.exe.*Running$"'
) do sc stop "%%a"

这将按名称停止进程。也许您可以使用文件名而不是PID?!?