限制批处理文件只能在上次运行后20秒后运行

时间:2016-06-03 09:07:05

标签: batch-file time

我需要创建一个调用URL的批处理文件(不打开浏览器),但仅在上次运行后20秒之后。如果它运行的时间超过20秒,则脚本不执行任何操作并关闭。我该怎么做呢?

2 个答案:

答案 0 :(得分:0)

如果批处理文件在关闭前等待20秒,并且一次只能运行一个实例,则问题就解决了。

使用thisthis之类的技术让您的批处理文件退出,而不执行任何其他操作(如果它已在运行)。

然后,如果批处理文件未检测到另一个正在运行的实例,请使用批处理文件末尾的timeout命令等待20秒。

  

超时/ t 20

答案 1 :(得分:0)

@montewhizdoh :如果在批处理文件末尾添加超时,则意味着您必须在批处理实际返回之前等待20秒,这可能是不可取的,尤其是它执行的操作应该很快发生。

@ seventy70 :通过在单独的文件中记录当前时间,您可以确保批处理将退出而不执行任何您不希望的操作,除非已经过了一定的秒数。以下代码实现了这一目标:

@echo off
Setlocal EnableDelayedExpansion

set lastTime=86500
if NOT EXIST lasttime.txt goto :nextStep

for /f "delims=;" %%i in (lasttime.txt) do (
  set lastTime=%%i
)
set /A lastTime=(%lastTime:~0,2%*3600) + (%lastTime:~3,2%*60) + (%lastTime:~6,2%)


:nextStep
set currTime=%TIME%
set /A currTime=(%currTime:~0,2%*3600) + (%currTime:~3,2%*60) + (%currTime:~6,2%)

:: required check in case we run the batch file right before and right after midnight
if %currTime% LSS %lastTime% (
  set /A spanTime=%lastTime%-%currTime%
) else (
  set /A spanTime=%currTime%-%lastTime%
)
if %spanTime% LSS 20 (
  echo Only %spantime% have passed since the last run
  goto :eof
)

:: ************************************
:: DO ACTUAL STUFF HERE
:: ************************************


if exist lasttime.txt del lasttime.txt
echo %time%>>lasttime.txt

endlocal

因此,每次允许批处理运行时,它都会在文件中记录当前时间。下一次,它会读取文件,从中提取时间并将其与当前时间进行比较。如果时间少于20秒,则批次退出。如果超过20秒,则可以执行实际操作,最后,当前时间再次记录在控制文件中,以供下次使用。