@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
@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
6条答案
按热度按时间yqkkidmi1#
ltskdhd12#
Bali C给出了一个简明扼要的回答。我需要一些更有特色和可重用的东西。以Bali C为例。我想到了这个。如果有人需要和我一样的东西。
your.bat
STARTwaitKILL.BAT
可以充实矿石采取更多的论点优先等,但我没有必要。应该不难添加。
zwghvu4y3#
Windows中不存在任何用于延迟应用程序或设置应用程序超时的命令
Windows中的超时是为了延迟CMD/Batfile的执行过程,没有更多的实用程序。
你可以使用外部工具,我不记得任何现在的名字,这么多地下软件,对不起,但我记得,在autoit官方论坛存在一个类似的命令行工具来启动一个应用程序设置超时,也许在工具NIRCMD,或ps2 exec,检查他们的帮助文件,或有人在WAIK工具包。
这是你唯一能做的:
6mzjoqzu4#
start
+timeout
+taskkill
等待精确给定的时间。因为我需要如果进程提前退出就停止等待,所以我用C++创建了自己的解决方案。tuxliketimeout
程序模仿GNU timeout。请随时下载并编译自https://github.com/cernoch/tuxliketimeout
gywdnpxw5#
在Windows 10中,最简单的方法是使用scriptrunner:
通过运行pause命令来演示超时(这将杀死被调用的进程):
ctzwtxfj6#
你可以使用
Wait-Job
来实现。如果命令没有超时,它会立即返回,因此您不必等待全部时间。当同一应用程序有多个示例运行Bali C's answer时,它也不会失败。只需通过在PowerShell中运行notepad $PROFILE
将下面的函数放入配置文件中并粘贴此代码片段然后,您可以在任何PowerShell会话中使用它。例如,以40 s超时运行
yourprogram.exe
您可以从这样的批处理文件中调用它
但是现在最好还是使用PowerShell
当然你也可以直接运行它,如果你只想这样做一次
您可以将
Start-Job
/Wait-Job
更改为Start-Process
/Wait-Process
,这将产生与ScriptRunner.exe
solution by npocmaka相同的结果