使用wmic搜索具有特定命令行的进程时如何过滤掉wmic进程?
How to filter out wmic process when searching for a process with a specific command line using 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
我想过滤掉 wmic
进程条目本身。我尝试了以下命令:
D:\Files>wmic process where "commandline like '%myapp%' and commandline not like '%wmic%'" get processid, commandline
Node - XXXXXXXXXXX
ERROR:
Description = Invalid query
但是输出如上所示的错误。
我尝试使用 more +1
手动跳过第一行,但输出行(进程)的顺序可能会发生变化。
如何删除 wmic
进程条目?
用方括号括起来指定一个范围内的任何一个字符 []
。
在您的评论中使用 java
示例:
在 batch-file
中(类似语句的双 %%
)
@echo off
wmic process where "commandline like '%%[m]y-complex-application.jar%%'" get processid, commandline
in cmd
(类似语句的单个 %
)
wmic process where "commandline like '%[m]y-complex-application.jar%'" get processid, commandline
为什么这样有效
[]
指定应该或可能匹配的字符范围。例如,当执行 ... like '%[abc]md%
时,它将匹配任何与 amd
、bmd
和 cmd
相关的内容。这里的技巧是 []
中的字符作为文字字符匹配,而不是 []
。因此,在我们搜索 [m]yapp
的情况下,它会逐字转换字符串以准确找到单词 myapp
,但是,您的 wmic
s like
语句根本不包含该单词, 它包含单词 [m]yapp
并且不会匹配它。
然后,一些无用的信息。此技巧也适用于 Linux' grep
命令以及 windows' findstr
示例 (findstr
):
echo myapp | findstr /R "[m]yapp"
结果:
示例 (Linux' grep
):
ps -ef | grep "[t]nslsnr"
有和没有 []
的结果
直接在 cmd 中 运行 您的特定命令和 return 您需要的实例的正确方法是:
wmic process where "commandline like '%myapp%' and not commandline like 'wmic%'" get processid, commandline
这种机制的思想是排除wmic命令行本身。它通过询问在任何地方包含字符串 myapp
但不包含以字符串 wmic
.
开头的命令行来做到这一点
如果此命令在 batch-file 中 运行,则百分比字符需要加倍,即
wmic process where "commandline like '%%myapp%%' and not commandline like 'wmic%%'" get processid, commandline
我试图直接从命令提示符和批处理脚本中通过 运行 以下命令找到名称为 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
我想过滤掉 wmic
进程条目本身。我尝试了以下命令:
D:\Files>wmic process where "commandline like '%myapp%' and commandline not like '%wmic%'" get processid, commandline
Node - XXXXXXXXXXX
ERROR:
Description = Invalid query
但是输出如上所示的错误。
我尝试使用 more +1
手动跳过第一行,但输出行(进程)的顺序可能会发生变化。
如何删除 wmic
进程条目?
用方括号括起来指定一个范围内的任何一个字符 []
。
在您的评论中使用 java
示例:
在 batch-file
中(类似语句的双 %%
)
@echo off
wmic process where "commandline like '%%[m]y-complex-application.jar%%'" get processid, commandline
in cmd
(类似语句的单个 %
)
wmic process where "commandline like '%[m]y-complex-application.jar%'" get processid, commandline
为什么这样有效
[]
指定应该或可能匹配的字符范围。例如,当执行 ... like '%[abc]md%
时,它将匹配任何与 amd
、bmd
和 cmd
相关的内容。这里的技巧是 []
中的字符作为文字字符匹配,而不是 []
。因此,在我们搜索 [m]yapp
的情况下,它会逐字转换字符串以准确找到单词 myapp
,但是,您的 wmic
s like
语句根本不包含该单词, 它包含单词 [m]yapp
并且不会匹配它。
然后,一些无用的信息。此技巧也适用于 Linux' grep
命令以及 windows' findstr
示例 (findstr
):
echo myapp | findstr /R "[m]yapp"
结果:
示例 (Linux' grep
):
ps -ef | grep "[t]nslsnr"
有和没有 []
直接在 cmd 中 运行 您的特定命令和 return 您需要的实例的正确方法是:
wmic process where "commandline like '%myapp%' and not commandline like 'wmic%'" get processid, commandline
这种机制的思想是排除wmic命令行本身。它通过询问在任何地方包含字符串 myapp
但不包含以字符串 wmic
.
如果此命令在 batch-file 中 运行,则百分比字符需要加倍,即
wmic process where "commandline like '%%myapp%%' and not commandline like 'wmic%%'" get processid, commandline