With the new Windows 1909 update we got some nice fixes of crucial issues with Windows 10, but also got a few new bugs. For me, probably the most annoying one is that with every boot all of my 20 network drives are marked as offline. Now the fix is easy, just pop them open with your explorer, and the notification (could not reconnect all network drives) goes away, but doing that for all of them is a bit annoying. Now Microsoft is aware of the issue and has marked it to be fixed within the next updates, but until then here is a small script that will find and open (as well as close) those drives for you and make the notification go away.

Just save the bellow script as ANYTHING.bat save it to your PC and either add it to your startup menu or just leave it on your desktop to click when you need to.

 

@echo off
setlocal enabledelayedexpansion
echo Auto reconnect all offline network drives
echo Slurp-Ramen.com April 2020 
echo https://slurp-ramen.com

echo .
echo Waiting for your network
set LC=0
goto :waitfornet_
:waitfornet
    timeout /t 1 /NOBREAK >nul
:waitfornet_
    route print -4  | findstr /C:" 0.0.0.0 " >nul 2>nul
    if not errorlevel 1 goto :NetReady
    set /A LC=%LC%+1
if %LC% LSS 30 goto :waitfornet
goto :eof

:NetReady
echo .
echo Network online
timeout /t 5 /nobreak >nul
goto :RefreshNetDrives

:RefreshNetDrives
echo .
echo Searching for offline drives:

set "OfflineNetDrives_cnt=0"

net use | findstr /b /v OK |findstr "A:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=A:"
)
net use | findstr /b /v OK |findstr "B:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=B:"
)
net use | findstr /b /v OK |findstr "C:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=C:"
)
net use | findstr /b /v OK |findstr "D:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=D:"
)
net use | findstr /b /v OK |findstr "E:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=E:"
)
net use | findstr /b /v OK |findstr "F:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=F:"
)
net use | findstr /b /v OK |findstr "G:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=G:"
)
net use | findstr /b /v OK |findstr "H:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=H:"
)
net use | findstr /b /v OK |findstr "I:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=I:"
)
net use | findstr /b /v OK |findstr "J:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=J:"
)
net use | findstr /b /v OK |findstr "K:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=K:"
)
net use | findstr /b /v OK |findstr "L:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=L:"
)
net use | findstr /b /v OK |findstr "M:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=M:"
)
net use | findstr /b /v OK |findstr "N:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=N:"
)
net use | findstr /b /v OK |findstr "O:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=O:"
)
net use | findstr /b /v OK |findstr "P:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=P:"
)
net use | findstr /b /v OK |findstr "Q:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=Q:"
)
net use | findstr /b /v OK |findstr "R:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=R:"
)
net use | findstr /b /v OK |findstr "S:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=S:"
)
net use | findstr /b /v OK |findstr "T:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=T:"
)
net use | findstr /b /v OK |findstr "U:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=U:"
)
net use | findstr /b /v OK |findstr "V:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=V:"
)
net use | findstr /b /v OK |findstr "W:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=W:"
)
net use | findstr /b /v OK |findstr "X:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=X:"
)
net use | findstr /b /v OK |findstr "Y:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=Y:"
)
net use | findstr /b /v OK |findstr "Z:"
if not errorlevel 1 (
    set /a OfflineNetDrives_cnt+=1
    set "OfflineNetDrives[!OfflineNetDrives_cnt!]=Z:"
)

echo !OfflineNetDrives_cnt! Found offline drives
echo .
echo Reconnecting all offline drives:
for /L %%n in (1 1 !OfflineNetDrives_cnt!) DO ( echo !OfflineNetDrives[%%n]! & Start /min explorer "!OfflineNetDrives[%%n]!")
goto :CleanUp

:CleanUp
timeout /t 5 /nobreak >nul
echo .

echo Exiting all windows opened

for /L %%n in (1 1 !OfflineNetDrives_cnt!) DO (
for /f "tokens=2 delims=," %%a in ('tasklist /fi "imagename eq explorer.exe" /v /fo:csv /nh ^| findstr /r "!OfflineNetDrives[%%n]!"') do (echo !OfflineNetDrives[%%n]! & taskkill /pid %%a)
)
echo .
echo Done
timeout /t 5 /nobreak >nul

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.