BDM 's ответ показывает, как этого добиться tasklist
возвращает также более длинные имена процессов.
Просто позвольте мне указать, что опция фильтра /FI
(tasklist /FI "ImageName eq process.exe"
) принимает более длинные имена процессов (или изображений), только усеченный текст может быть усечен.
В любом случае, вы не выводите имена процессов на консоль, но отправляете их в find
, поэтому возвращаемый текст действительно уместен.
Но вместо того, чтобы снова искать в возвращенном списке процессов имена процессов, просто чтобы определить, запущен ли хотя бы один из них, вы можете отменить поиск, чтобы захватитьtasklist
сообщение, когда findstr
не встречает соответствующих процессов, например:
tasklist /FI "ImageName eq %ProcessName%.exe" | findstr /V /B /C:"INFO: " > nul
Это, как и ваша команда find
, устанавливает ErrorLevel
в случае, если не найдено ни одного соответствующего процесса.
Альтернативой tasklist
является команда wmic
:
wmic Process where "Name='%ProcessName%.exe'" get Name,ProcessID
И вместе с find
:
wmic Process where "Name='%ProcessName%.exe'" get Name,ProcessID 2> nul | find /I ".exe" > nul