我目前正在运行一组利用批处理文件中的超时功能的命令。超时函数使用一个变量来表示它应暂停多少秒,我认为这可能会导致问题,但我迫切需要它才能正常运行。
我的问题有了更新,详细说明了可能发生的事情。
我在评论中使用了一些建议来尝试修复我的脚本,但它没有用。
这是我的剧本:
:connectToTheInternet
setlocal EnableDelayedExpansion
set timeout=2
echo checking internet connection
echo.
:connectToTheInternetRestart
ping -n 1 google.com | find /i "TTL=" >NUL && (
echo Internet connection already established, checking script versions.
echo.
goto scriptVersion
REM toupd
) || (
if "%COUNTER%"=="0" (
echo Creating wifi profile.
echo.
set /A COUNTER=1
goto createWifiProfile
)
SET /A "tries = (%COUNTER%-1)+1"
REM if failed endonfail times, give up
if "%COUNTER%"=="%endonfail%" (
echo Error: Could not connect to network %tries% times, stopping script.
echo.
goto endNoShutdown
)
echo.
echo Attempt #%COUNTER%.
echo.
REM raise waiting time between connections
SET /A "modulo = (%COUNTER%-1) %% 2"
if "%modulo%" EQU "0" (
set /A timeout=timeout+2
echo failed %tries% times in a row. Increasing wait time between actions to %timeout% seconds.
set /A COUNTER=COUNTER+1
) else (
set /A COUNTER=COUNTER+1
)
REM disconnect existing network
netsh wlan disconnect
netsh wlan delete profile name="%wifissid%"
timeout /t 1 /nobreak
echo.
REM attempt connection
netsh wlan add profile filename="connect.xml"
netsh wlan connect name="%wifissid%" ssid="%wifissid%" >NUL
echo.
echo Wait time is currently !timeout! seconds.
timeout /t !timeout! /nobreak
echo.
REM check pings
ping -n 1 google.com | find /i "TTL=" >NUL && (
echo Successfully connected. Checking script version.
echo.
goto scriptVersion
) || (
set /a COUNTER2=COUNTER+1
echo Connection attempt failed. Starting attempt #%COUNTER2% in 3 seconds.
echo.
timeout /t 3 /nobreak
cls
goto connectToTheInternetRestart
)
)
我的问题特别是timeout /t !timeout! /nobreak
应该等待一段可变的时间。问题是,有时(仅在设备成功连接到互联网时发生,但不是每次设备连接到互联网时),超时会跳到10,000秒,30,000秒或其他一些随机的高数字(而且它们实际上是随机的,我在12,536秒看到了一些。)当它应该总是小于12时,基于超时变量。是的,我的意思是 秒 非 毫秒 。可以想象,10k秒(大约21天)与10秒之间存在很大差异。
我不知道造成这种情况的原因,或者如何解决它,并希望得到一些帮助。
答案 0 :(得分:2)
这是一个由你的评论带来的左派思想
(仅当设备成功连接到互联网时才会发生,但每次设备连接到互联网时都不会发生)
在连接到互联网之前,日期,时间和时区是否正确?连接会同步时间 - 这可能会导致超时!
就像我说的:左场,但是......
答案 1 :(得分:1)
choice
似乎不会受timeout
提到的行为的影响:"在运行timeout 300
时从另一个cmd窗口更改时间时,"等待......"提示确实相应地改变了剩余时间"。
因此,您可以使用
代替timeout /t !timeout!
choice /n /c yn /d y /t !timeout!
/c yn
只是为了让它与语言无关。