使用wmic通过特定命令行搜索进程时如何过滤掉wmic进程?

Jug*_*try 2 windows cmd batch-file wmic

myapp我尝试通过运行以下命令直接从命令提示符和批处理脚本中按名称查找应用程序:

D:\Files>wmic process where "commandline like '%myapp%'" get processid, commandline

CommandLine                                                                  ProcessId  
wmic  process where "commandline like '%myapp%'" get processid, commandline  10744     
myapp myarg1 myarg2 myarg3                                                   2423 
Run Code Online (Sandbox Code Playgroud)

我想过滤掉wmic进程条目本身。我尝试了以下命令:

D:\Files>wmic process where "commandline like '%myapp%' and commandline not like '%wmic%'" get processid, commandline

Node - XXXXXXXXXXX
ERROR:
Description = Invalid query
Run Code Online (Sandbox Code Playgroud)

但它会输出如上所示的错误。

我尝试手动跳过第一行,more +1但输出行(进程)的顺序可能会有所不同。

可以做什么来删除wmic进程条目?

Ger*_*ard 8

通过用方括号括起来来指定某一范围内的任意一个字符[]

使用java您评论中的示例:

batch-file%%类似声明的双倍)中

@echo off
wmic process where "commandline like '%%[m]y-complex-application.jar%%'" get processid, commandline
Run Code Online (Sandbox Code Playgroud)

in (类似语句的cmd单个)%

wmic process where "commandline like '%[m]y-complex-application.jar%'" get processid, commandline
Run Code Online (Sandbox Code Playgroud)

为什么这有效

指定[]应该或可以匹配的字符范围。例如,执行此操作时,... like '%[abc]md%它将匹配与amd,bmd和相关的任何内容cmd。这里的技巧是, 中的字符[]作为文字字符匹配,而不是与[]. 因此,在我们搜索的情况下,[m]yapp它会逐字转换字符串以准确找到单词myapp,但是,您的wmicslike语句根本不包含该单词,它包含该单词[m]yapp并且不会匹配它。

然后,一些无用的信息。这个技巧也适用于 Linuxgrep和 Windows 的命令findstr

例子 (findstr):

echo myapp | findstr /R "[m]yapp"
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述

示例(Linux' grep):

ps -ef | grep "[t]nslsnr"
Run Code Online (Sandbox Code Playgroud)

有和无的结果[]

在此输入图像描述