如何在批处理FOR循环中设置最大运行时长
按指定时长运行FOR循环的批处理实现方案
我有一个超长列表需要分段处理,每段处理完成后需等待外部触发再继续执行。最初我设置FOR循环每次运行处理100行数据,但由于电脑工作负载存在波动,每次循环的实际耗时并不固定。
因此我想实现让FOR语句按指定时长运行,但未找到对应的实现示例。参考Stephan提出的搭配*延迟扩展(delayed expansion)*使用FOR循环的建议后,已成功实现该功能,具体代码如下:
@ECHO OFF SETLOCAL enabledelayedexpansion CLS set ENDTIME=!TIME! set function_endtime=!ENDTIME! for /F "tokens=1-4 delims=:.," %%a in ("%function_endtime%") do ( set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100" ) :: 在当前时间基础上增加4秒作为结束时间 set /A function_endtime=start+(4*100) :: 格式化时间用于后续判断 set /A hh=function_endtime/(60*60*100),rest=function_endtime%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100 if %hh% lss 10 set hh=0%hh% if %mm% lss 10 set mm=0%mm% if %ss% lss 10 set ss=0%ss% if %cc% lss 10 set cc=0%cc% set function_endtime=%hh%:%mm%:%ss%.%cc% echo 结束时间: %function_endtime% 当前时间: %time% FOR /F "tokens=1,2 delims=," %%A IN (C:\test.txt) DO ( echo %%A %%B set "last_value=%%B" if "!time!" geq "%function_endtime%" goto :done ) :done echo 当前时间: %time%
如果需要调整单次循环的运行时长,只需要修改set /A function_endtime=start+(4*100)中的4为目标秒数即可。
内容的提问来源于stack exchange,提问作者user74341
相关产品推荐
相关产品推荐

