社内NASや共有サーバーへのバックアップ処理、ファイル転送、定期レポート配布など、バッチファイルからネットワーク上の共有フォルダにアクセスする場面は多くあります。net use コマンドでネットワークドライブを自動マウントすることで、こうした処理を完全に自動化できます。
この記事では、net use の基本構文から始め、接続確認・エラーハンドリング・既存ドライブの衝突回避・リトライ処理・資格情報の安全な扱い・複数ドライブの一括マウント・タスクスケジューラ実行時の落とし穴まで、実務で必要な知識をすべて解説します。
net use の基本構文とオプション解説、マウント確認と処理実行の安全なパターン、既存ドライブ(衝突)の事前クリーン処理、接続失敗時のリトライロジック、資格情報の安全な管理(Windowsの資格情報マネージャー活用)、複数ドライブの一括マウント・一括解除、完全自動バックアップスクリプトの実装例、タスクスケジューラ実行時の注意点(EnableLinkedConnections)まで
net use コマンドの基本構文
net use はWindowsのコマンドラインでネットワークドライブの割り当て・切断・一覧表示を行うコマンドです。バッチファイルでは最も基本的な共有フォルダ接続手段として広く使われています。
:: ドライブレターに共有フォルダを割り当て(認証なし) net use Z: \\サーバー名\共有フォルダ名 :: ユーザー名・パスワードを指定して接続(ドメイン環境) net use Z: \\192.168.0.10\shared /user:DOMAIN\username password :: ワークグループ環境(ドメインなし) net use Z: \\192.168.0.10\shared /user:username password :: 接続状態の一覧表示 net use :: 特定のドライブを切断 net use Z: /delete :: すべてのネットワーク接続を切断 net use * /delete /yes
| オプション | 説明 | 例 |
|---|---|---|
Z: |
割り当てるドライブレター(A〜Z の未使用の文字) | Z:・Y: |
\\サーバー\共有 |
UNCパス(共有フォルダの場所) | \\192.168.0.10\backup |
/user: |
認証ユーザー名(ドメイン認証は DOMAIN\user) |
/user:CORP\john |
*(パスワード省略) |
実行時にパスワードを対話入力させる | バッチでは使いにくい |
/persistent:yes |
ログオン後も接続を維持する | 再起動後も再接続される |
/persistent:no |
セッション限りの接続(デフォルト) | 処理後に明示的に削除する場合 |
/delete |
割り当てを解除する | net use Z: /delete |
UNCパス(Universal Naming Convention)は
\\サーバー名\共有フォルダ名 の形式で、ドライブレターを使わずに共有フォルダを指定する方式です。バッチファイルではドライブレターを割り当てずにUNCパスを直接使う方法もあります。詳しくはバッチファイルで共有フォルダにアクセスする方法も参照してください。基本パターン:マウント→処理→切断
ネットワークドライブを使った処理の基本形は「マウント → 処理 → 切断」の3ステップです。処理後は必ずドライブを切断して後処理を行います。
@echo off
setlocal
:: ── 設定(環境に合わせて変更) ──────────────────────
set "DRIVE=Z:"
set "SHARE=\\192.168.0.10\shared"
set "USER=CORP\john"
set "PASS=P@ssword123"
:: ── Step1: マウント ──────────────────────────────────
echo [1/3] ネットワークドライブをマウント中...
net use %DRIVE% %SHARE% /user:%USER% %PASS% > nul 2>&1
if ERRORLEVEL 1 (
echo [ERROR] マウントに失敗しました。
echo サーバー: %SHARE%
echo ネットワーク接続・認証情報を確認してください。
exit /b 1
)
echo [OK] マウント成功: %SHARE% → %DRIVE%
:: ── Step2: 処理 ──────────────────────────────────────
echo [2/3] 処理を実行中...
copy "C:\work\report.xlsx" "%DRIVE%\reports\" /Y
if ERRORLEVEL 1 (
echo [ERROR] ファイルのコピーに失敗しました。
goto :cleanup
)
echo [OK] ファイルのコピー完了
:: ── Step3: 切断(必ず実行) ──────────────────────────
:cleanup
echo [3/3] ドライブを切断中...
net use %DRIVE% /delete > nul 2>&1
echo [OK] 切断完了
endlocal
処理の途中でエラーが発生しても、
goto :cleanup で切断処理まで必ず到達できます。これにより、処理失敗後もドライブが接続されたまま残ってしまう問題を防げます。既存ドライブの衝突を回避する
すでにZドライブが使用されている状態で net use Z: を実行すると「System error 85」(ドライブレターがすでに使われている)エラーになります。事前チェックと削除を行うことで、この問題を確実に回避できます。
@echo off
setlocal
set "DRIVE=Z:"
set "SHARE=\\192.168.0.10\shared"
:: すでに Z: が存在するか確認
net use %DRIVE% > nul 2>&1
if NOT ERRORLEVEL 1 (
echo [INFO] Z: が既に存在します。切断してから再接続します。
net use %DRIVE% /delete > nul 2>&1
:: 切断完了まで少し待つ
timeout /t 2 /nobreak > nul
)
:: 改めてマウント
net use %DRIVE% %SHARE% > nul 2>&1
if ERRORLEVEL 1 (
echo [ERROR] マウントに失敗しました: %SHARE%
exit /b 1
)
echo [OK] マウント成功: %DRIVE%
endlocal
@echo off
setlocal
set "DRIVE=Z:"
set "SHARE=\\fileserver\share"
:: if exist でドライブが存在するかチェック
if exist %DRIVE%\ (
echo [INFO] Z: が利用可能です。再接続します。
net use %DRIVE% /delete > nul 2>&1
timeout /t 1 /nobreak > nul
)
net use %DRIVE% %SHARE% > nul 2>&1
if ERRORLEVEL 1 goto :error_mount
echo [OK] マウント成功
:: ... 処理 ...
goto :cleanup
:error_mount
echo [ERROR] ネットワークドライブのマウントに失敗
exit /b 1
:cleanup
net use %DRIVE% /delete > nul 2>&1
endlocal
接続失敗時のリトライ処理
ネットワークの瞬断や起動直後のサーバー初期化などで一時的に接続できない場合があります。リトライロジックを組み込むことで、一時的な障害に対して堅牢な処理が実現できます。
@echo off
setlocal
set "DRIVE=Z:"
set "SHARE=\\192.168.0.10\backup"
set "USER=CORP\batch_user"
set "PASS=BatchP@ss!"
:: リトライ設定
set /a RETRY_MAX=3
set /a RETRY_WAIT=10
set /a RETRY_COUNT=0
:retry_mount
set /a RETRY_COUNT+=1
echo [%RETRY_COUNT%/%RETRY_MAX%] ネットワークドライブへ接続を試みています...
:: 既存の接続をクリア
net use %DRIVE% /delete > nul 2>&1
:: マウント実行
net use %DRIVE% %SHARE% /user:%USER% %PASS% > nul 2>&1
if NOT ERRORLEVEL 1 (
echo [OK] 接続成功
goto :mount_ok
)
:: 失敗時の処理
echo [WARN] 接続失敗 (%RETRY_COUNT%/%RETRY_MAX%)
if %RETRY_COUNT% LSS %RETRY_MAX% (
echo %RETRY_WAIT%秒後に再試行します...
timeout /t %RETRY_WAIT% /nobreak > nul
goto :retry_mount
)
:: 最大リトライ回数を超えた
echo [ERROR] %RETRY_MAX%回試行しましたが接続できませんでした。
echo サーバー: %SHARE%
exit /b 1
:mount_ok
:: 以降に処理を記述
echo 処理を実行します...
:cleanup
net use %DRIVE% /delete > nul 2>&1
endlocal
タスクスケジューラで起動直後に実行する場合は RETRY_WAIT=30〜60(秒)にするとよいでしょう。PC起動時はネットワーク接続の確立まで数十秒かかる場合があります。接続障害の自動リカバリについては共有フォルダへの接続エラーを検出して自動リカバリする方法も参考にしてください。
資格情報の安全な管理
バッチファイルにパスワードを平文で書くことはセキュリティリスクです。ファイルが流出した場合に認証情報が漏洩します。以下の方法でリスクを軽減できます。
方法1: Windowsの資格情報マネージャーを活用する(推奨)
Windowsの資格情報マネージャー(コントロールパネル → 資格情報マネージャー → Windowsの資格情報 → 資格情報の追加)に接続情報を登録しておけば、net use でユーザー名・パスワードを省略できます。
@echo off
setlocal
:: 資格情報マネージャーに \192.168.0.10\shared の認証情報が登録済みの場合
:: /user と パスワードを省略できる
net use Z: \\192.168.0.10\shared > nul 2>&1
if ERRORLEVEL 1 (
echo [ERROR] 接続失敗。資格情報マネージャーの設定を確認してください。
exit /b 1
)
echo [OK] 接続成功(保存済み資格情報を使用)
endlocal
方法2: 外部ファイルからパスワードを読み込む
パスワードを別ファイルに分離し、バッチファイル本体には含めない方法です。パスワードファイルのアクセス権限を適切に設定することで、セキュリティを高められます。
@echo off
setlocal
:: パスワードファイル(バッチと同ディレクトリ)
set "PASS_FILE=%~dp0.secret\net_pass.txt"
:: パスワードファイルの存在確認
if not exist "%PASS_FILE%" (
echo [ERROR] パスワードファイルが見つかりません: %PASS_FILE%
exit /b 1
)
:: パスワードを読み込む(ファイルの1行目)
for /f "usebackq delims=" %%P in ("%PASS_FILE%") do (
set "NET_PASS=%%P"
goto :got_pass
)
:got_pass
:: パスワードを使って接続
net use Z: \\192.168.0.10\shared /user:CORP\batch_user "%NET_PASS%" > nul 2>&1
if ERRORLEVEL 1 (
echo [ERROR] 接続失敗
exit /b 1
)
endlocal
P@ssword123
パスワードファイルは必要最小限のユーザーのみ読み取れるようACLを設定してください。
icacls ".secret\net_pass.txt" /inheritance:r /grant "SYSTEM:R" /grant "バッチ実行ユーザー:R"でアクセス権を絞れます。バッチファイル自体はパスワードを含まないため、ソースコードのリポジトリに含めても安全です。方法3: ドメイン参加PCではパスワードを省略する
Windowsドメインに参加しているPCでは、ドメインユーザーとして実行することでパスワードを省略できます。タスクスケジューラで「ユーザーがログオンしているかどうかに関わらず実行する」設定で登録したバッチが該当します。
@echo off
:: ドメイン参加PC・ドメインユーザー実行なら /user と PASS は不要
net use Z: \\fileserver\shared > nul 2>&1
if ERRORLEVEL 1 (
echo [ERROR] 接続失敗。ドメイン参加状態を確認してください。
exit /b 1
)
複数ドライブの一括マウント・一括解除
複数の共有フォルダを使う処理では、ドライブを一括でマウントし、処理後に一括で解除する仕組みを作ると管理しやすくなります。
@echo off
setlocal
:: ── ドライブ定義 ────────────────────────────────────
:: 形式: ドライブレター|UNCパス|ユーザー名|パスワード
set "MOUNT_01=Y:|\\nas01\data|CORP\batch|pass1"
set "MOUNT_02=Z:|\\nas01\backup|CORP\batch|pass1"
set "MOUNT_03=X:|\\nas02\archive|CORP\reader|readpass"
:: マウントする最大数
set "MOUNT_COUNT=3"
:: ── マウント処理 ─────────────────────────────────────
for /l %%i in (1,1,%MOUNT_COUNT%) do (
call :mount_drive MOUNT_0%%i
if ERRORLEVEL 1 goto :cleanup_all
)
echo [OK] すべてのドライブをマウントしました。
:: ── ここに処理を記述 ─────────────────────────────────
echo 処理実行中...
:: 例: robocopy Y:\data Z:ackup /mir /log:backup.log
goto :cleanup_all
:: ── マウントサブルーチン ─────────────────────────────
:mount_drive
setlocal
set "ENTRY=!%1!"
for /f "tokens=1,2,3,4 delims=|" %%a in ("%ENTRY%") do (
set "DRV=%%a"
set "UNC=%%b"
set "USR=%%c"
set "PWD=%%d"
)
net use %DRV% %UNC% /user:%USR% %PWD% > nul 2>&1
if ERRORLEVEL 1 (
echo [ERROR] マウント失敗: %UNC% → %DRV%
endlocal
exit /b 1
)
echo [OK] %UNC% → %DRV%
endlocal
exit /b 0
:: ── 一括解除 ─────────────────────────────────────────
:cleanup_all
echo ドライブを一括解除中...
net use Y: /delete > nul 2>&1
net use Z: /delete > nul 2>&1
net use X: /delete > nul 2>&1
echo [OK] 解除完了
endlocal
上記スクリプトで
!%1! のように ! を使っている箇所は遅延展開(setlocal enabledelayedexpansion)が必要です。ただし call サブルーチン内では endlocal があるため、実際の運用では変数名の展開方法を調整してください。シンプルに扱う場合は、マウント処理を直接並べて書く方が読みやすい場合もあります。実践パターン:NASへの自動バックアップスクリプト
net use によるマウントとROBOCOPYの使い方完全ガイドを組み合わせた、実務で使える自動バックアップスクリプトの完成形です。ログ記録・リトライ・クリーンアップをすべて含んでいます。
@echo off
setlocal enabledelayedexpansion
:: ============================================================
:: NAS自動バックアップ - nas_backup.bat
:: 用途: 指定フォルダを社内NASにROBOCOPYでバックアップする
:: 実行: タスクスケジューラから毎日02:00に実行
:: ============================================================
:: ── 設定 ────────────────────────────────────────────────
set "BACKUP_SRC=C:\work\projects"
set "NAS_UNC=\\nas01\backup"
set "NAS_DRV=Z:"
set "NAS_USER=CORP\backup_svc"
set "NAS_PASS=Bkp@2024!"
set "LOG_DIR=C:\logs\nas_backup"
set "LOG_FILE=%LOG_DIR%\backup_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.log"
set /a RETRY_MAX=3
set /a RETRY_WAIT=30
:: ── ログディレクトリ確認 ─────────────────────────────────
if not exist "%LOG_DIR%" mkdir "%LOG_DIR%"
:: ── ログ関数 ─────────────────────────────────────────────
set "TIMESTAMP=%DATE% %TIME%"
echo ======================================= >> "%LOG_FILE%"
echo バックアップ開始: %TIMESTAMP% >> "%LOG_FILE%"
echo 送信元: %BACKUP_SRC% >> "%LOG_FILE%"
echo 送信先: %NAS_UNC% >> "%LOG_FILE%"
echo ======================================= >> "%LOG_FILE%"
:: ── ドライブをクリーン ────────────────────────────────────
net use %NAS_DRV% /delete > nul 2>&1
timeout /t 2 /nobreak > nul
:: ── リトライ付きマウント ─────────────────────────────────
set /a RETRY_COUNT=0
:retry
set /a RETRY_COUNT+=1
echo [%RETRY_COUNT%/%RETRY_MAX%] NAS接続試行... >> "%LOG_FILE%"
net use %NAS_DRV% %NAS_UNC% /user:%NAS_USER% %NAS_PASS% > nul 2>&1
if NOT ERRORLEVEL 1 goto :mount_ok
if %RETRY_COUNT% LSS %RETRY_MAX% (
echo [WARN] 接続失敗。%RETRY_WAIT%秒後リトライ >> "%LOG_FILE%"
timeout /t %RETRY_WAIT% /nobreak > nul
goto :retry
)
echo [ERROR] NASへの接続失敗(%RETRY_MAX%回試行)>> "%LOG_FILE%"
exit /b 1
:mount_ok
echo [OK] NAS接続成功: %NAS_UNC% >> "%LOG_FILE%"
:: ── ROBOCOPY でバックアップ ───────────────────────────────
echo [INFO] ROBOCOPYバックアップ開始 >> "%LOG_FILE%"
robocopy "%BACKUP_SRC%" "%NAS_DRV%\projects" ^
/MIR ^
/R:2 /W:10 ^
/LOG+:"%LOG_FILE%" ^
/TEE ^
/NP
set /a ROBO_ERR=%ERRORLEVEL%
:: ROBOCOPYの終了コード判定(0-3は正常)
if %ROBO_ERR% GEQ 8 (
echo [ERROR] ROBOCOPYがエラーで終了: コード %ROBO_ERR% >> "%LOG_FILE%"
goto :cleanup
)
echo [OK] バックアップ完了(終了コード: %ROBO_ERR%) >> "%LOG_FILE%"
:cleanup
:: ── ドライブ切断 ─────────────────────────────────────────
net use %NAS_DRV% /delete > nul 2>&1
echo [OK] NAS切断完了 >> "%LOG_FILE%"
echo バックアップ終了: %DATE% %TIME% >> "%LOG_FILE%"
if %ROBO_ERR% GEQ 8 exit /b 1
exit /b 0
ROBOCOPYの終了コードは
ERRORLEVEL で確認できますが、0〜7 は正常(コピー数・スキップ数などの組み合わせ)で、8以上 がエラーを示します。通常の if ERRORLEVEL 1 を使うと正常コピー時もエラー扱いになるため、if %ROBO_ERR% GEQ 8 で判定します。詳しくはROBOCOPYの使い方完全ガイドを参照してください。タスクスケジューラ実行時の注意点
バッチファイルをタスクスケジューラから自動実行する場合、タスクスケジューラから実行したときだけ動作が異なる原因と解決策にあるように手動実行と異なる動作をすることがあります。ネットワークドライブ関連では特に注意が必要な事項があります。
問題1: タスクスケジューラからnet useが動作しない
「ユーザーがログオンしているかどうかに関わらず実行する」設定の場合、ネットワークドライブへのアクセスが制限されることがあります。これはUACの管理者昇格とネットワークドライブのセッション分離が原因です。
@echo off
setlocal
:: ドライブレターを割り当てず、UNCパスで直接操作
set "SHARE=\\192.168.0.10\backup"
set "USER=CORP\batch"
set "PASS=BatchPass!"
:: 接続のみ確立(ドライブレターは不要)
net use %SHARE% /user:%USER% %PASS% > nul 2>&1
if ERRORLEVEL 1 (
echo [ERROR] 接続失敗: %SHARE%
exit /b 1
)
:: UNCパスで直接操作
copy "C:\work\data.csv" "%SHARE%\" /Y
robocopy "C:\work\reports" "%SHARE%\reports" /MIR
:: 接続を解除
net use %SHARE% /delete > nul 2>&1
endlocal
:: ※ 管理者権限が必要。一度設定すれば以降は不要。
:: SYSTEM と昇格ユーザーでネットワーク接続を共有できるようになる
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" ^
/v EnableLinkedConnections /t REG_DWORD /d 1 /f
:: 設定後はPCを再起動する
タスクスケジューラでネットワーク共有にアクセスできないときの解決策では、タスクスケジューラから実行したバッチでネットワーク共有にアクセスできない問題の原因と解決策を詳しく解説しています。管理者権限の有無によって挙動が変わる理由も説明しています。
問題2: 実行ユーザーの権限不足
タスクスケジューラのセキュリティオプションで「SYSTEM」アカウントを使う場合、共有フォルダのACLに「SYSTEM」が含まれていないとアクセスできません。専用のサービスアカウント(CORP\batch_svc など)を作成し、タスクスケジューラとACLの両方に設定するのが本番環境での推奨パターンです。
:: サービスアカウントでタスクを登録(管理者権限で実行)
schtasks /create ^
/tn "DailyNasBackup" ^
/tr "C:\scripts\nas_backup.bat" ^
/sc daily /st 02:00 ^
/ru "CORP\batch_svc" ^
/rp "BatchP@ss!" ^
/rl HIGHEST ^
/f
schtasksコマンドでタスクスケジューラを制御する方法では、schtasksコマンドの全オプションと実践的な登録パターンを詳しく解説しています。
net use のよくあるエラーと解決方法
| エラーコード | エラーメッセージ | 原因 | 対処方法 |
|---|---|---|---|
| 85 | System error 85 | ドライブレターが既に使われている | 事前に net use Z: /delete で削除 |
| 53 | System error 53 | ネットワークパスが見つからない | UNCパスのスペルミス・サーバーが起動しているか確認 |
| 86 | System error 86 | パスワードが正しくない | パスワードを確認。スペース含む場合は "password" でクォート |
| 1326 | System error 1326 | ログオン失敗(ユーザー名またはパスワード誤り) | ユーザー名のドメイン形式を確認(DOMAIN\user) |
| 1219 | System error 1219 | 同一サーバーへ異なるユーザーで接続しようとしている | 既存接続を net use /delete で切断してから再接続 |
| 2 | 指定されたファイルが見つかりません | サービスアカウントの権限不足または共有名のミス | 共有フォルダ名と権限を確認 |
@echo off
net use Z: \\192.168.0.10\shared
if ERRORLEVEL 1 (
:: エラーコードを数値で取得して詳細確認
echo ERRORLEVEL = %ERRORLEVEL%
:: net helpmsg でエラーの詳細を表示
net helpmsg %ERRORLEVEL%
)
接続状態を確認するデバッグ用コマンド
:: 現在のネットワーク接続一覧
net use
:: 特定のUNCパスへの接続状態を確認
net use \\192.168.0.10\shared
:: pingでサーバーの死活確認
ping -n 1 192.168.0.10 > nul 2>&1
if ERRORLEVEL 1 (
echo サーバーに到達できません
) else (
echo サーバーは稼働中
)
:: 共有フォルダの一覧を表示(サーバーへのアクセス権が必要)
net view \\192.168.0.10
よくある質問(FAQ)
persistent:no(デフォルト)であれば、Windowsログオフ時に自動で切断されます。ただし同一セッション内で再度同じドライブレターを使おうとするとエラー85が発生します。処理の信頼性のため、:cleanup ラベルで必ず切断することを推奨します。net use \\サーバー\共有 /user:ユーザー パスワードで認証情報を事前に登録する必要があります(ドライブレターを割り当てないだけで、接続操作は同じです)。タスクスケジューラからの実行時はUNCパスの方が安定する場合があります。/persistent:yes はWindowsログオン後も接続を維持し、再起動後も自動再接続します(スタートアップのイメージ)。/persistent:no(デフォルト)は現在のセッション限りで切断されます。バッチファイルで処理ごとにマウント・切断する場合は persistent:no のままで問題ありません。net use Y: \\server\share1 /user:user pass の後に net use Z: \\server\share2 で2つ目の共有フォルダを割り当てる際はパスワードを省略できます(同一ユーザーとして認識されるため)。"(ダブルクォート)でパスワードを囲みます:net use Z: \\server\share /user:user "P@ss word!"。ただし ^・!・% などのバッチ特殊文字には別途エスケープが必要です。特殊文字の多いパスワードは外部ファイルから読み込む方法が安全です。まとめ
バッチファイルで net use を使ったネットワークドライブの自動マウントは、社内業務の自動化において非常に重要な技術です。
| 項目 | 推奨パターン |
|---|---|
| 基本パターン | マウント → 処理 → :cleanup で切断(エラー時も必ず切断) |
| 既存ドライブ対策 | 事前に net use DRIVE /delete でクリーン化 |
| 接続失敗対策 | リトライループ(3回・30秒間隔)を組み込む |
| 資格情報管理 | 資格情報マネージャー登録 または 外部ファイル読み込み |
| タスクスケジューラ | UNCパス直接指定 または EnableLinkedConnections 設定 |
| エラー確認 | if ERRORLEVEL 1 + net helpmsg %ERRORLEVEL% |
バッチファイルで共有フォルダにアクセスする方法:共有フォルダへのアクセス基礎。
共有フォルダへの接続エラーを検出して自動リカバリする方法:接続エラーの自動リカバリ処理。
ROBOCOPYの使い方完全ガイド:ROBOCOPYを使った高速・差分バックアップ。
schtasksコマンドでタスクスケジューラを制御する方法:タスクスケジューラへの登録と管理。
タスクスケジューラでネットワーク共有にアクセスできないときの解決策:タスクスケジューラからネットワーク共有にアクセスできない問題の解決。

