GrumpyCrouton
GrumpyCrouton

Reputation: 8621

batch file timeout command jumping to 10k, 30k, 40k seconds

I'm currently running a set of commands that utilizes the timeout function in my batch files. The timeout function uses a variable for how many seconds it should pause, and I think that may be causing issues, but I desperately need it to function properly.


I've got an update to my question which details more about what may be happening.

I used some suggestions that I had in the comments to try and fix my script, but it did not work.

Here is my script:

: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
        )
    )

My problem is specifically the timeout /t !timeout! /nobreak which should wait for a variabled amount of time. The problem is, sometimes (it only happens when the device successfully connects to the internet, but not every time the device connects to the internet) the timeout jumps up to 10,000 seconds, 30,000 seconds or some other random high number (And they really are random, I've seen some at like 12,536 seconds.) When it should always be less than 12 based on the timeout variable. Yes, I mean seconds NOT milliseconds. As you can imagine, there is a big difference between 10k seconds (roughly 21 days) vs 10 seconds.

I have no idea what could be causing this, or how to solve it and would love some help.

Upvotes: 1

Views: 1005

Answers (2)

Stephan
Stephan

Reputation: 56180

choice seems not to be affected by the mentioned behaviour of timeout: "when changing the time from another cmd window while running a timeout 300, the "waiting for ..." prompt indeed changes the remaining time accordingly".

So instead of timeout /t !timeout! you can use

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

/c yn is just for making it language independent.

Upvotes: 1

John Burger
John Burger

Reputation: 3672

Here's a left-field thought, brought about by your comment

(it only happens when the device successfully connects to the internet, but not every time the device connects to the internet)

Before it connects to the internet, is the date, time and timezone correct? Connecting will synchronise the time - which may muck up your timeouts!

Like I said: left-field, but...

Upvotes: 3

Related Questions