Batch file 当同名进程处于打开状态时,在超时后终止进程-批处理
我正在通过多个批处理运行许多exe。有时,一些前任被卡住了,所以我选择在超时后杀死他们,就像这样: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"
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,请参阅。