29

我想用 Windows 批处理文件启动一个程序。但是程序应该在某个超时值后停止。例如:运行程序 60 秒,并在 60 秒后停止。

在 Linux 下,有这个很好的timeout命令可以做我想做的事。Windows 也有一个timeout命令,但它只是暂停一个命令,延迟它的执行。Windows下还有其他东西可以这样做吗?

设置:Windows 7、64 位、专业版

4

5 回答 5

39
start yourprogram.exe
timeout /t 60
taskkill /im yourprogram.exe /f
于 2012-11-22T14:57:46.783 回答
13

Bali C 给出了简明扼要的回答。我需要一些更有特色和可重用的东西。基于 Bali C 的示例。我想出了这个。如果有人需要和我一样的。

你的.bat

REM...

CALL STARTwaitKILL..bat /relative/path/your_program.exe

REM...

STARTwaitKILL.BAT

@ECHO OFF 
IF[%1]==[] GOTO EOF
IF NOT EXIST %1 GOTO EOF

REM SET PRIORITY=/NORMAL
REM ADJUST PRIORITY, BELOWNORMAL LETS BATCH FILE RUN MORE SMOOTHLY
REM WITH A PROGRAM THAT CONSUMES MORE CPU. SEE ABOUT MAXWAIT BELLOW
SET PRIORITY=/BELOWNORMAL
REM SET PRIORITY=/LOW
REM 0 NORMAL WINDOW :: 1 NO WINDOW :: 2 MINIMIZED WINDOW
SET /A HIDDEN=1
REM MAXWAIT HERE IS MORE LIKE MINIMUM WAIT IN WINDOWS.
SET MAXWAIT=10
SET WAITCOUNT=0

SET ARGS=/I %PRIORITY%
IF %HIDDEN% EQU 1 SET ARGS=%ARGS% /B
IF %HIDDEN% EQU 2 SET ARGS=%ARGS% /MIN

START %ARGS% %1

:WAIT
IF %WAITCOUNT% GEQ %MAXWAIT% GOTO KILL_IT

TIMEOUT /T 1 > NUL
SET /A WAITCOUNT+=1
FOR /F "delims=" %%a IN ('TASKLIST ^| FIND /C "%~nx1"') DO IF %%a EQU 0 GOTO RUN_DONE
GOTO WAIT

:KILL_IT
TASKKILL /IM %~nx1 /F > NUL
:RUN_DONE

可以充实矿石以获取更多优先级等参数,但我不需要它。应该不难补充。

于 2013-08-04T16:49:15.600 回答
4

Windows 中不存在任何延迟应用程序或为应用程序设置超时的命令

Windows 中的 Timeout 是为了延迟 CMD/Batfile 的执行过程,仅此而已。

你可以使用外部工具,我现在不记得名字了,这么多地下软件,对不起,但我记得在 autoit 官方论坛中有一个类似的命令行工具来启动一个设置超时的应用程序,也许在工具 NIRCMD 或 ps2exec 中,检查他们的帮助文件或 WAIK 工具包中的某个人。

这是您唯一可以做的:

@Echo OFF

:: First launch the app in background mode, because some applications stops the execution of CMD.
Start /B ".\Dir\Your app.exe"

:: Then stay in background for a certain time
Timeout /T "Seconds"

:: Continue your code...
Pause&Exit
于 2012-11-22T15:30:06.577 回答
4

start++timeout完全taskkill等待定的时间。由于如果进程提前退出,我需要停止等待,因此我在 C++ 中创建了自己的解决方案。

tuxliketimeout程序模仿GNU 超时。随意下载和编译

https://github.com/cernoch/tuxliketimeout

于 2018-03-12T16:03:12.957 回答
0

在 Windows 10 中,最简单的方法是使用scriptrunner

通过运行暂停命令来演示超时(这将杀死被调用的进程):

ScriptRunner.exe -appvscript cmd "/c" "pause" -appvscriptrunnerparameters -wait -timeout=20
于 2020-11-11T13:45:37.170 回答