根据图像路径终止进程

根据图像路径终止进程

我继承了一个环境,其中两个不同的进程使用相同的名称,但它们的可执行文件存储在不同的文件路径中。任何时候都可能运行一个进程、另一个进程或两个进程。

当我执行某些操作(如修补)时,我希望终止与修补目录相关的进程,但不终止其他进程。

使用各种不同的技术,我可以轻松地根据进程名称终止进程,例如(如果不使用 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

我找到了一种做我想做的事情的方法,并想分享该解决方案。

此解决方案需要 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 未找到任何内容时,它会发出看似相当严重的错误 - 但实际上它只是在说“我什么也没找到”。

相关内容