我需要创建一个调用URL的批处理文件(不打开浏览器),但仅在上次运行后20秒之后。如果它运行的时间超过20秒,则脚本不执行任何操作并关闭。我该怎么做呢?
答案 0 :(得分:0)
如果批处理文件在关闭前等待20秒,并且一次只能运行一个实例,则问题就解决了。
使用this或this之类的技术让您的批处理文件退出,而不执行任何其他操作(如果它已在运行)。
然后,如果批处理文件未检测到另一个正在运行的实例,请使用批处理文件末尾的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秒,则可以执行实际操作,最后,当前时间再次记录在控制文件中,以供下次使用。