【bat】共有フォルダへの接続エラーを検出して自動リカバリする方法

【bat】共有フォルダへの接続エラーを検出して自動リカバリする方法 bat

ネットワーク共有フォルダを使った業務処理では、突然の接続エラーやアクセス不能によりスクリプトが停止してしまうケースがあります。これを未然に防ぐためには、共有フォルダへの接続確認とリカバリ処理を自動化することが重要です。

本記事では、バッチファイルでネットワークドライブの接続状況を確認し、必要に応じて再接続を試みる処理を実装する方法を紹介します。

目的:接続が切れても自動復旧する処理を構築

想定する利用シーンは以下の通りです。

  • 処理開始時に共有フォルダへアクセスできるかチェックする
  • アクセス不可であれば、自動で再接続(net use)を試みる
  • ログを出力し、復旧状況を記録する

基本構文:接続確認と再接続処理

以下は、ネットワーク共有フォルダの接続確認とリカバリ処理を行うバッチスクリプトの基本例です。

@echo off
setlocal

set "SHARE=\\192.168.1.100\shared"
set "DRIVE=Z:"
set "USER=DOMAIN\username"
set "PASS=password"
set "LOG=connect_log.txt"

echo ==== 処理開始 %DATE% %TIME% ==== >> %LOG%

rem 既にドライブが接続されているかチェック
if exist %DRIVE%\ (
  echo [%DRIVE%] は既に接続されています。 >> %LOG%
) else (
  echo [%DRIVE%] が未接続。再接続を試みます。 >> %LOG%
  net use %DRIVE% /delete /yes >nul 2>&1
  net use %DRIVE% %SHARE% /user:%USER% %PASS% >> %LOG% 2>&1

  rem 再接続の成否を確認
  if exist %DRIVE%\ (
    echo [%DRIVE%] への再接続に成功しました。 >> %LOG%
  ) else (
    echo [%DRIVE%] への再接続に失敗しました。処理を中断します。 >> %LOG%
    exit /b 1
  )
)

rem ここに共有フォルダに対する処理を記述
echo 共有フォルダにアクセス可能です。 >> %LOG%
copy %DRIVE%\data.txt .\backup\ >> %LOG% 2>&1

echo ==== 処理終了 %DATE% %TIME% ==== >> %LOG%
endlocal

スクリプトの補足ポイント

  • if exist で共有フォルダがアクセス可能かを確認
  • net use による再接続時、既存のマウントがあれば削除
  • ログ出力で処理状況を可視化

パスワードのセキュリティ対策

パスワードをスクリプト内に直接記述するのはセキュリティ上好ましくありません。以下のような対策が有効です。

  • 資格情報マネージャー(cmdkey)を使う
  • 外部テキストファイルに記述し、読み込む(ただし暗号化を推奨)

資格情報マネージャーを使った接続方法

事前にコマンドプロンプトで以下のように資格情報を登録しておくことで、スクリプト内にパスワードを記述せずに済みます。

cmdkey /add:192.168.1.100 /user:DOMAIN\username /pass:password

その後、以下のようにして接続します。

net use Z: \\192.168.1.100\shared

まとめ

共有フォルダの接続状態を事前にチェックし、エラー発生時に自動で復旧する処理を組み込むことで、より堅牢で安定したバッチ処理が可能になります。

特に以下のような場面で役立ちます。

  • 定期的なバックアップ処理
  • 業務データの共有フォルダ同期
  • 出力ファイルの一括収集

ネットワークの不安定さに左右されない、自動回復機能付きのスクリプトを構築して、業務の信頼性を高めていきましょう。