批处理文件超时命令跳转到10k,30k,40k秒

时间:2016-06-03 16:24:13

标签: batch-file

我目前正在运行一组利用批处理文件中的超时功能的命令。超时函数使用一个变量来表示它应暂停多少秒,我认为这可能会导致问题,但我迫切需要它才能正常运行。

我的问题有了更新,详细说明了可能发生的事情。

我在评论中使用了一些建议来尝试修复我的脚本,但它没有用。

这是我的剧本:

: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秒之间存在很大差异。

我不知道造成这种情况的原因,或者如何解决它,并希望得到一些帮助。

2 个答案:

答案 0 :(得分:2)

这是一个由你的评论带来的左派思想

  

(仅当设备成功连接到互联网时才会发生,但每次设备连接到互联网时都不会发生)

在连接到互联网之前,日期,时间和时区是否正确?连接会同步时间 - 这可能会导致超时!

就像我说的:左场,但是......

答案 1 :(得分:1)

choice似乎不会受timeout提到的行为的影响:"在运行timeout 300时从另一个cmd窗口更改时间时,"等待......"提示确实相应地改变了剩余时间"。

因此,您可以使用

代替timeout /t !timeout!
choice /n /c yn /d y /t !timeout!

/c yn只是为了让它与语言无关。