如何使用批处理文件在其名称中找到* 32进程的路径?

时间:2017-05-25 12:51:34

标签: batch-file

我正在使用批处理文件来尝试查找名为" you.exe"的进程。但在任务管理器中,名称是" you.exe * 32"。我怎样才能找到它的路径?
我试过这个剧本:

for %%I in (PROCESS-NAME.exe *32) do set "ExPath=%%~$PATH:I"
echo %ExPath%   

但由于某些原因,它不能处理名称中有* 32的流程 它只适用于具有普通名称的进程,例如" you.exe"

如何找到这些流程的路径?
我正在使用Windows 7

如果我有多个具有相同名称的流程,我该怎么办? 。

我会举个例子:enter image description here

根据答案中的一位用户的建议,我使用此批处理文件进行搜索:

@echo off

setlocal
set "process=issch.exe"

for /f "usebackq delims=" %%p in (`wmic process where "name='%process%'"
                               get executablepath /value 2^>nul ^| findstr 
^=`) do (
  set %%p
)

if defined executablePath (
   echo %executablePath%
 )^
else (
  echo Unable to find process: %process%
)

PAUSE

当我尝试搜索进程时:issch.exe图片中标记的内容没有给我任何内容。 甚至没有找到的消息
但是,当我尝试搜索其他名称时:ipoint.exe它可以正常工作 或者,如果我尝试搜索issch.exe *32,我会收到未找到消息

所以我的猜测是它找到了进程issch.exe,但由于某种原因,它无法处理其进程。值。
 我得到了相同的#34;错误"对于其名称中包含 * 32 的每个流程。

如何在名称中搜索* 32的流程,并获取其路径?

1 个答案:

答案 0 :(得分:1)

您可以使用wmic命令检索进程的可执行路径。以下脚本查找名为PROCESS-NAME.exe的所有进程,并将变量executablePath设置为找到的进程的路径。

这种方法的问题在于,对于每一次匹配,变量executablePath都将被覆盖。 executablePath变量将设置为找到的最后一个匹配项。

@echo off

setlocal
set "process=PROCESS-NAME.exe"

for /f "usebackq delims=" %%p in (`wmic process where "name='%process%'"
                                   get executablepath /value 2^>nul ^| findstr ^=`) do (
  set %%p
)

if defined executablePath (
  echo %executablePath%
)^
else (
  echo Unable to find process: %process%
)

另一种方法是在设置其值之前检查变量exePath是否已定义。这样,exePath变量将设置为找到的第一个匹配项。

@echo off

setlocal
set "process=PROCESS-NAME.exe"

for /f "usebackq skip=1 delims=" %%p in (`wmic process where "name='%process%'"
                                          get executablepath 2^>nul`) do (
  if not defined exePath (
    set "exePath=%%p"
  )
)

if not "%exePath%" == "" (
  echo %exePath%
)^
else (
  echo Unable to find process: %process%
)

为了保存每个进程的可执行路径,检索到的值必须存储在单独的变量中。请记住,如果您要查找的进程是从同一位置多次执行的,则所有检索到的值也是相同的,您将需要另一种方法来区分一个进程与另一个进程。根据您的情况,可以通过比较Win32_Process类中的一些其他属性来实现此目的。

@echo off

setlocal enabledelayedexpansion
set "processName=PROCESS-NAME.exe"

for /f "usebackq delims=" %%p in (`wmic process where "name='%processName%'"
                                   get executablepath /value 2^>nul ^| findstr ^=`) do (
  set /a count+=1
  set process[!count!].%%p
)

if not defined process[%count%].executablePath (
  echo Unable to find process: %processName%
  exit /b
)

for /l %%c in (1, 1, %count%) do (
  echo !process[%%c].executablePath!
)