WMIC 捕获输出

问题描述 投票:0回答:1

我正在尝试创建批处理文件,该文件将使用 wmic 查找进程并终止它。命令行如下所示:

"C:\Progress\OE117\bin\_progres"  -ininame Pro2.ini -basekey "INI" -b -pf C:\Progress\Pro2-XXXTest\bprepl\Scripts\replProc.pf -p bprepl\RunReplProc.p -param "Thread=33"

并使用 wmic 我设法找到了该过程:

wmic 进程,其中“名称如‘_progres.exe’”获取进程 ID,命令行

结果如下:

"C:\Progress\OE117\bin\_progres"  -ininame Pro2.ini -basekey "INI" -b -pf C:\Progress\Pro2-XXXTest\bprepl\Scripts\replProc.pf -p bprepl\RunReplProc.p -param "Thread=33"

                   11780

现在问题来了。有许多进程看起来非常相似。我想过滤命令行上 -pf 参数的子字符串 - 在本例中为“Pro2-XXXTest”和命令行末尾的“Thread=nn” 本质上我想做的是:

找到一个进程,其中可执行文件是_progres.exe,pf参数与给定字符串(在本例中为“Pro2-XXXTest”)匹配并且具有“Thread=nn”(nn将来自批处理文件)并终止它。

我已经设法得到上面显示的输出,但无法弄清楚如何同时过滤进程名称和参数名称。

如有任何提示,将不胜感激。

谢谢

奈杰尔

batch-file wmic
1个回答
0
投票
@ECHO OFF
SETLOCAL

SET "sourcedir=u:\your files"
SET "filename1=%sourcedir%\q76759067.txt"

SET "target=%~1"
SET "thread="

FOR /f "delims=" %%e IN ('type "%filename1%"') DO (
 rem Boolean flag
 SET "foundproc="
 rem analyse each element
 FOR %%y IN (%%e) DO (
  IF DEFINED foundproc (
   FOR /f "tokens=1*delims==" %%b IN ("%%~y") DO (
    IF /i "%%b"=="thread" SET "Thread=%%c"
   )
  )
  ECHO %%~y|FIND "\%target%\">NUL
  IF NOT ERRORLEVEL 1 SET "foundproc=y"
 )
)

SET thread

GOTO :EOF

这是一个将由 thisbatch Pro2-XXXTest

调用的测试

我使用文件作为输入,因为我无法调用您的

wmic
命令来生成示例结果。您只需要将
type filename
命令替换为
wmic
命令即可。

© www.soinside.com 2019 - 2024. All rights reserved.