1

Я унаследовал среду, в которой два разных процесса используют одинаковые имена, но их исполняемые файлы хранятся в разных файловых путях. Ни один, ни другой, ни оба могут работать в любое время.

Когда я выполняю определенные операции (например, исправление), я хочу, чтобы процесс, связанный с каталогом исправления, был завершен, но не другой.

Используя различные методы, я без проблем завершаю процессы на основе имени процесса, например (менее элегантно без использования powershell):

echo Checking for procname process...
tasklist /FI "IMAGENAME eq procname .exe" | !windir!\system32\find /I "procname.exe" 
set EL=!ERRORLEVEL!
if !EL! EQU 0 (
    echo Killing procname process...
    TASKKILL /F /FI "IMAGENAME eq procname.exe"
)

или более элегантно (используя powershell)

powershell Clear-Host 
powershell Stop-Process -name procname

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

Вместо того, чтобы убивать эти процессы на основе их имени процесса, как я могу убить процесс, основываясь на пути к их исполняемому файлу?

1 ответ1

0

Я нашел способ сделать то, что хочу, и решил поделиться решением.

Это решение требует PowerShell.

powershell Get-Process <ProcessName> ^| Where-Object {$_.Path -like '*<path_fragment>*'} ^| Stop-Process

** "^ |" трубы необходимы для того, чтобы они оставались внутри интерпретатора powershell. Использование нормального канала ("|"), кажется, передает его обратно обычному интерпретатору команд и прерывает команду.

Чтобы поместить некоторые реальные значения в этот код, предположим, что уничтожаемый процесс - это Notepad++:

powershell Get-Process notepad++ ^| Where-Object {$_.Path -like '*Notepad++*'} ^| Stop-Process

Это может быть вызвано в командной строке из командного файла (что и является моим намерением).

Если пользователи могут увидеть вывод команды выше, поместите перенаправление stderr в nul в конце строки. Когда Get-Process не находит что-то, он выдает довольно серьезную ошибку, но на самом деле это просто способ сказать: «Я ничего не нашел».

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .