コマンドでネットワークドライブを一旦削除して再作成を行います

スポンサーリンク

コマンドでネットワークドライブを削除から再作成する

Windows 10 Ver2004 の起動時ネットワークドライブの自動接続ができない場合がある不具合の改善方法を検討しています。
かなりの高確率で接続できません。

ネットワークドライブの割り当て」から「ネットワークの場所の追加」に変更しても改善できないことから、「net use」コマンドでネットワークドライブの削除→再作成を行うことにしました。

バッチファイルを作成して実行するだけなので再起動するよりは、実用的な感じがします。

今回、作成したそのままなのオリジナルバッチファイルを参考に掲載しています。

再作成のタイミングで一度の実行では作成できない場合があるようなので、しばらく様子を見ることにします。

不具合発生の場合でもコマンドなら削除ができるようですが、コマンドで作成出来ない場合があるという以前からあった不具合が関係しているのかもしれません。

バッチファイル ドラフト版 ↓

@echo off
rem ----- 切断・削除 -----
if exist u: ( ←行削除※
net use u: /delete /yes
rem net use u: /delete /yes > NUL 2>&1
) ←行削除※

timeout /T 3
if exist u: goto Error

:R
rem ----- 接続・作成 -----
rem net use u: \\192.168.#.#\〇〇〇〇
net use u: \\192.168.#.#\〇〇〇〇 /persistent:yes

if exist u: exit

color 2f
echo.
echo ドライブ「u:」は作成できませんでした。
echo.

set Try=N
set /p Try="再度、作成コマンドを実行しますか? [Y/N*空白](N*空白=終了)="
if defined Try set Try=%Try:"=%
if /i NOT "%Try%" == "y" exit
color 07
goto R

:Error
color 4f
echo.
echo ドライブ「u:」を切断できませんでした。
echo コマンドを終了します。
echo.
timeout /T 3
color 07
exit

「u:」は割り当てたドライブレター

rem行は必要ありません。環境に合わせて変更が必要です。

これでしばらく検証します。バッチファイルは、ドラフト版なので都度改善変更します。

検証1

不具合発生時、3行目「if exist~」では、削除できないことが判明。
ドライブを完全に認識できないようです。(存在しないと判定されます)
3行目※と6行目※を削除し「if exist~」なしで実行すると何故か、ドライブ削除が出来たり出来なかったりします・・・。
不具合発生時の再作成に関しては、3秒の待ち時間では足りず、ある程度のタイムラグが必要になることが多いようです。

不具合発生時は、「if exist~」コマンドが正常に動作しません…
コマンドが途中で停止し、エラーでもなく停止します…

「explorer」にも関係があるようです。

検証を行っていると、「if exist~」でフリーズしたり、存在しているのに存在していない動作をしたり、またその逆の動作など、意味不明な動作をすることがあるので、現時点では再起動することが最良の方法です。

参考画像

コマンドで切断しようとすると・・・↓

コマンドで作成しようとすると・・・↓

ネットワークドライブの切断をしようとすると(右クリック)・・・

メニューから「ネットワークドライブの切断」をすると・・・↓

1回のコマンド実行で正常に切断→作成できる確率は約40%位です。
複数回の実行で正常に作成に切断→作成できる確率は約70%位です。
「explorer」操作も含めると80%~90%位は、再起動せず改善できます。
約10%~20%位は、やむなく再起動が必要になります。

かなり完成度の高いバッチファイルが出来たのですが、たまに「システムエラー53」が出ます。ネットワークパスが見つからないというメッセージですが、別画面で再実行などタイミングをずらしたり、しばらく(数秒)すると解消されます。ファイアウォールが関係している可能性もあります・・・

「システムエラー53」はネットワークアダプタ再起動で解決できるようですが、コマンドでは、管理者として実行が必要になるため、模索中です。

結論

再起動せず、バッチファイルで修正することはできるようになったのですが、修正する以前の問題で、不具合発生時に Windows が不安定になり結果的に時間の無駄になります。
過去の Microsoft の対応を考えると、おそらくこのまま仕様変更になる可能性が高いと思われます。
結論として、「ネットワークドライブの割り当て」の設定「サインイン時に再接続する」をやめることにしました。安定性を考え必要に応じてネットワークドライブを使用することにしました。

参照

作成したバッチファイル最終版です ↓ 残念ながら使用することはなくなりました…

@echo off
taskkill /f /im explorer.exe
call :D
call :E
call :E
timeout /T 3
if exist u: goto Error
:R
call :U
if exist u: exit

echo.
echo ●再度「net use」コマンドを実行します。
taskkill /f /im explorer.exe
call :E
call :E
timeout /T 3
call :U
if exist u: exit

color 2f
echo.
echo ドライブ「u:」は作成できませんでした。
echo.
echo ※ネットワークアダプタを再起動してください。
echo.
set Try=N
set /p Try="再度、作成コマンドを実行しますか? [Y/N*空白](N*空白=終了)="
if defined Try set Try=%Try:"=%
if /i NOT "%Try%" == "y" exit
color 07
goto :R

:Error
color 4f
echo.
echo ドライブ「u:」を切断できませんでした。
echo コマンドを終了します。
echo.
timeout /T 3
color 07
exit

rem --- sub ---
:D
rem ----- 切断・削除 -----
net use u: /delete /yes
rem net use u: /delete /yes > NUL 2>&1
rem if exist u: net use u: /delete /yes
goto :eof

:U
rem ----- 接続・作成 -----
rem net use u: \\192.168.#.#\〇〇〇〇
net use u: \\192.168.#.#\〇〇〇〇 /persistent:yes
timeout /T 2
goto :eof

:E
timeout /T 2
start explorer.exe
goto :eof

同じ動作の別バージョンです ↓

@echo off
taskkill /f /im explorer.exe

rem ----- 切断・削除 -----
net use u: /delete /yes
rem net use u: /delete /yes > NUL 2>&1
rem if exist u: net use u: /delete /yes

timeout /T 2
start explorer.exe
timeout /T 2
start explorer
timeout /T 3
if exist u: goto Error

:R
rem ----- 接続・作成 -----
rem net use u: \\192.168.#.#\〇〇〇〇
net use u: \\192.168.#.#\〇〇〇〇 /persistent:yes

timeout /T 2
if exist u: exit

echo.
echo ●再度「net use」コマンドを実行します。
taskkill /f /im explorer.exe
timeout /T 2
start explorer.exe
timeout /T 2
start explorer
timeout /T 3
net use u: \\192.168.#.#\〇〇〇〇 /persistent:yes
timeout /T 2
if exist u: exit

color 2f
echo.
echo ドライブ「u:」は作成できませんでした。
echo.
echo ※ネットワークアダプタを再起動してください。
echo.
set Try=N
set /p Try="再度、作成コマンドを実行しますか? [Y/N*空白](N*空白=終了)="
if defined Try set Try=%Try:"=%
if /i NOT "%Try%" == "y" exit
color 07
goto :R

:Error
color 4f
echo.
echo ドライブ「u:」を切断できませんでした。
echo コマンドを終了します。
echo.
timeout /T 3
color 07
exit

ネットワークアダプタ再起動コマンド ↓

@echo off
rem ----- 管理者権限で実行 -----
echo.
echo コマンドプロンプトを管理者として実行します
echo.

for /f "tokens=3 delims=\ " %%A in ('whoami /groups^|find "Mandatory"') do set LEVEL=%%A
if not "%LEVEL%"=="High" (
powershell -NoProfile -ExecutionPolicy Unrestricted -Command "Start-Process \"%~f0\" -Verb runas"
exit
)

rem powershell Restart-NetAdapter -Name イーサネット

netsh interface set interface name="イーサネット" disable
netsh interface set interface name="イーサネット" enable
exit

コメント

タイトルとURLをコピーしました