我正在尝试创建批处理文件,该文件将使用 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将来自批处理文件)并终止它。
我已经设法得到上面显示的输出,但无法弄清楚如何同时过滤进程名称和参数名称。
如有任何提示,将不胜感激。
谢谢
奈杰尔
@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
命令即可。