Как отфильтровать процесс wmic при поиске процесса с определенной командной строкой с помощью 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?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
91
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Укажите любой символ в диапазоне, заключив его в квадратные скобки [].

Используя пример java в ваших комментариях:

В batch-file (двойной %% для аналогичного утверждения)

@echo off
wmic process where "commandline like '%%[m]y-complex-application.jar%%'" get processid, commandline

в cmd (один % для подобного утверждения)

wmic process where "commandline like '%[m]y-complex-application.jar%'" get processid, commandline

Почему это работает

[] указывает диапазон символов, которые должны или могут быть сопоставлены. Например, при выполнении ... like '%[abc]md% он будет соответствовать всему, что связано с amd, bmd и cmd. Хитрость здесь в том, что символ внутри [] сопоставляется как буквальный символ, а не с []. Таким образом, в случае, когда мы ищем [m]yapp, он буквально преобразует строку, чтобы найти именно слово myapp, однако ваше утверждение wmics like вообще не содержит этого слова, оно содержит слово [m]yapp и не будет соответствовать ему.

Потом немного бесполезной информации. Этот трюк также работает для команды grep Linux, а также для Windows findstr

пример (findstr):

echo myapp | findstr /R "[m]yapp"

результат:

пример (Linux' grep):

ps -ef | grep "[t]nslsnr"

Результат с [] и без

Правильный способ запуска вашей конкретной команды и возврата только тех экземпляров, которые вам нужны, непосредственно в , заключается в следующем:

wmic process where "commandline like '%myapp%' and not commandline like 'wmic%'" get processid, commandline

Идея этого механизма состоит в том, чтобы исключить саму командную строку wmic. Он делает это, запрашивая командные строки, которые содержат где угодно строку myapp, но не включают командные строки, начинающиеся со строки wmic.

Если эта команда запускается в , символы процента потребуют удвоения, т.е.

wmic process where "commandline like '%%myapp%%' and not commandline like 'wmic%%'" get processid, commandline

Другие вопросы по теме

Bat для создания файлов m3u в нескольких папках, за исключением определенного расширения
Из пакетного файла мне нужно рекурсировать каталоги (и подкаталоги) и распаковать каждый найденный zip-файл в их текущий каталог с удалением архива
Пакетное открытие хрома на python
Как переместить 10 файлов Excel в 10 разных папок, созданных пакетным файлом
Как создать дистрибутивный zip-пакет из java-проекта в netbeans? содержащий .bat файл
Как экранировать специальные символы в пакетном файле при установке переменной
Пакетный файл Windows Infinite Loop зависает при запуске файла Python
Я не могу запустить скрипт autoit через планировщик задач во время входа в систему. Ни как летучая мышь, ни как exe. Они бегут сами по себе
Как правильно экранировать многострочный вывод плюс FOR плюс %PROGRAMFILES(X86)% plus pipe при сохранении в переменной
Как очистить буфер обмена Windows с помощью пакетного файла или PowerShell?