我正在使用批处理文件来尝试查找名为" you.exe"的进程。但在任务管理器中,名称是" you.exe * 32"。我怎样才能找到它的路径?
我试过这个剧本:
for %%I in (PROCESS-NAME.exe *32) do set "ExPath=%%~$PATH:I"
echo %ExPath%
但由于某些原因,它不能处理名称中有* 32的流程 它只适用于具有普通名称的进程,例如" you.exe"
如何找到这些流程的路径?
我正在使用Windows 7
如果我有多个具有相同名称的流程,我该怎么办?
。
。
我会举个例子:
根据答案中的一位用户的建议,我使用此批处理文件进行搜索:
@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的流程,并获取其路径?
答案 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!
)