结束 Windows 批处理文件中使用 START 命令启动的进程

结束 Windows 批处理文件中使用 START 命令启动的进程

我有以下批处理文件,它使用 ADB 监视设备日志并搜索字符串:

@ECHO OFF
ECHO Starting log monitor...
START /B adb.exe logcat > log

:LOOP
(TYPE log | FIND "string to find") > NUL
IF "%errorlevel%" == "1" GOTO LOOP

:END
ECHO String found!

该脚本logcat使用 启动命令,该命令在后台异步运行START /B

找到字符串后,我想结束异步logcat命令,因为它不再需要。

主脚本有没有办法告诉异步脚本结束?


我知道从技术上讲我可以使用adb.exe kill-servertaskkill /F /IM adb.exe结束所有 ADB 进程,但我只需要结束命令logcat并继续运行所有其他 ADB 实例。

答案1

@echo off

echo/ starting log monitor...
start /b adb.exe logcat >.\mylogcat.log

:loop
find "string to find" .\mylogcat.log >nul || (
   >nul timeout 15 /nobreak & goto loop ) 
 
echo/ string found!
wmic process where "name like '%%adb.exe%%' and commandline like '%%logcat%%'" delete

您可以使用进程名称和用于启动该进程的命令行部分的组合来终止该进程wmic

wmic process where "name like '%%adb.exe%%' and commandline like '%%logcat%%'" delete

您可以使用运营商||保持循环,并为监控循环添加超时...

:loop
find "string to find" .\mylogcat.log >nul || (
   >nul timeout 15 /nobreak & goto loop ) 


在 PowerShell 中使用Get-WmiObject

Get-WmiObject Win32_Process | % { if ($_.ProcessName -like '*adb.exe*' -and $_.CommandLine -like '*mylogcat.log*') {kill $_.ProcessId}}

使用Get-CimInstance Win32_Process

Get-CimInstance Win32_Process -Filter "name='adb.exe'" | % { if ($_.CommandLine -like '*mylogcat.log*') {kill $_.ProcessId}}

# Or.... 
Get-CimInstance Win32_Process -Filter "name='adb.exe'" | 
% { if ($_.CommandLine -like '*mylogcat.log*') {kill $_.ProcessId}}

其他资源:

相关内容