Batch file 当同名进程处于打开状态时,在超时后终止进程-批处理

Batch file 当同名进程处于打开状态时,在超时后终止进程-批处理,batch-file,cmd,wmic,Batch File,Cmd,Wmic,我正在通过多个批处理运行许多exe。有时,一些前任被卡住了,所以我选择在超时后杀死他们,就像这样: CD mypath start myexe.exe timeout 60 TSKILL myexe 但是,由于所有exe都具有相同的名称,因此批处理不会关闭它启动的exe,而是关闭所有exe。我也试过: cd mypath for /f "tokens=2 delims==; " %%a in ('start myexe^| find "ProcessId"

我正在通过多个批处理运行许多exe。有时,一些前任被卡住了,所以我选择在超时后杀死他们,就像这样:

CD mypath
start myexe.exe
timeout 60
TSKILL myexe
但是,由于所有exe都具有相同的名称,因此批处理不会关闭它启动的exe,而是关闭所有exe。我也试过:

cd mypath
for /f "tokens=2 delims==; " %%a in ('start myexe^| find "ProcessId" ') do set MyPID=%%a
timeout 60
taskkill /PID %MyPID% /T 
但是,
超时
仅在exe完成后启动


如何终止特定批处理在超时后打开的进程?

您的问题注释中已经有一个指向纯
powershell
解决方案的链接,但是如果您想保留主
批处理文件
格式,可以将一些
powershell
合并到批处理文件中

@echo off
pushd "mypath"
for /f %%i in ('powershell "(Start-Process myexe -passthru).ID"') do (
    timeout /t 60
    taskkill /PID %%i
)
popd
注意:我将您的
cd
命令替换为
pushd
,之后我们必须
popd
返回目录,然后才能使用
pushd
。我更容易在目录之间来回移动,而无需每次定义
cd
命令。它也不关心在
cd
需要
/d
开关的地方更换驱动器。

您也可以使用它来运行和终止文件

例如:

@For/F“Tokens=3 Delims=;”%%G In(“%SystemRoot%\System32\wbem\WMIC.exe
进程调用创建“T:\he\Absolute Path\To\My File\myexe.exe”
2^>NUL^|%SystemRoot%\System32\find.exe“Id=“”)Do@Set“PID=%G”
@%SystemRoot%\System32\timeout.exe/T 60/NoBreak>numl
@%SystemRoot%\System32\wbem\WMIC.exe进程,其中“ProcessId='%PID%'”调用^
终止>编号2>&1
如果您不介意长行,则无需拆分它们以提高可读性:

@For/F“Tokens=3 Delims=;”%%G In(“%SystemRoot%\System32\wbem\WMIC.exe进程调用Create”T:\he\Absolute Path\To\My File\myexe.exe“2^>NUL^ |%SystemRoot%\System32\find.exe“Id=”)Do@Set“PID=%%G”
@%SystemRoot%\System32\timeout.exe/T 60/NoBreak>numl
@%SystemRoot%\System32\wbem\WMIC.exe进程,其中“ProcessId='%PID%'”调用Terminate>NUL 2>&1

您可以使用powershell,请参阅。