特定のUSBメモリが接続されたときにだけ自動処理を実行 - Windowsコマンド実用例
USBメモリをPCに接続した際、特定のボリュームラベルを持つUSBメモリだけに対して自動的にバックアップや同期などの処理を行うバッチスクリプト例を紹介します。タスクスケジューラを利用して接続検知を自動化する応用例もあわせて解説します。
使用コマンド
バッチファイルの例
@echo off
setlocal
set LABEL=MY_USB
set SRCDIR=C:\Data
set BACKUPDIR=backup
for %%D in (D E F G H I J K) do (
vol %%D: 2>NUL | findstr /i "%LABEL%" >NUL
if not errorlevel 1 (
echo USBメモリ %%D: を検出しました。
robocopy "%SRCDIR%" "%%D:\%BACKUPDIR%" /MIR
exit /b
)
)
echo 指定されたUSBメモリは接続されていません。
この例では、「MY_USB」というボリュームラベルの付いたドライブ(USBメモリ)を「D~K」のドライブから検索し、見つかった場合「C:\Data」のデータをそのドライブの「backup」ディレクトリにコピー(ミラーリング)しています。
補足事項
- ボリュームラベルはエクスプローラー上で設定可能です(USBメモリのドライブの「プロパティ」→入力欄にラベルを入力)。
- 検索対象ドライブレター(D~Kなど)は、必要に応じて適宜調整してください。
- 最初に検出した1台だけ処理する設計になっているため、複数台同時接続される場合の考慮が必要な場合は調整が必要です。
応用例:接続検知を自動化する
Windowsの「タスク スケジューラ」で「イベント発生時に実行」設定を使うと、USBメモリが接続されたタイミングでバッチを自動実行できます。以下の手順で設定可能です。
- タスク スケジューラを開く (Windows 11 の場合は「Windows ツール」内にあります。また、「タスク スケジューラ」と検索しても実行できます。)
- 「タスクの作成」→「トリガー」で「イベントで開始」を選択
- 以下のフィールドにそれぞれ内容を設定
- ログ:
Microsoft-Windows-DriverFrameworks-UserMode/Operational
- イベントID:
2003
(「デバイス接続」を意味します) - アクション: 上記で作成したバッチファイルを実行
- ログ:
コマンドラインから設定する場合は以下のように Schtasks コマンドを使うことも可能です。
schtasks /Create /TN "USBMonitor" /TR "C:\scripts\usb_backup.bat" /SC ONEVENT /EC Microsoft-Windows-DriverFrameworks-UserMode/Operational /MO *[System[(EventID=2003)]] /RU SYSTEM /F
これにより、USBメモリを挿入した瞬間に自動的に検出・同期処理が開始されます。