# USBWatcher v2.3 🌸 デスクトップに剥き出し保存する改良版!
import wmi
import time
import os
import shutil
from datetime import datetime
LOG_FILE = "usb_log.txt"
# 🖥️ デスクトップのパスを取得(Windows専用)
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
# 🔧 ログを出力(UTF-8で絵文字対応♪)
def log_event(msg):
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
entry = f"[{timestamp}] {msg}"
print(entry)
with open(LOG_FILE, "a", encoding="utf-8") as f:
f.write(entry + "\n")
# 📂 USB内の全ファイルを「デスクトップに直接」コピーする処理
def copy_from_usb_to_desktop(drive):
try:
for root, dirs, files in os.walk(drive):
for file in files:
src_file = os.path.join(root, file)
dst_file = os.path.join(desktop_path, file)
# 🔁 同名ファイルがあればタイムスタンプ追加で衝突回避
if os.path.exists(dst_file):
base, ext = os.path.splitext(file)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
dst_file = os.path.join(desktop_path, f"{base}_{timestamp}{ext}")
try:
shutil.copy2(src_file, dst_file)
log_event(f"✅ コピー成功: {src_file} → {dst_file}")
except PermissionError:
log_event(f"⚠️ アクセス拒否: {src_file}")
except Exception as e:
log_event(f"⚠️ コピーエラー: {src_file} → {e}")
log_event(f"🎉 すべてのファイルをデスクトップにコピー完了!")
except Exception as e:
log_event(f"❌ 全体コピー失敗: {e}")
# 🚀 USB監視スタート
print("[*] USB監視開始中...(Ctrl+Cで終了)")
c = wmi.WMI()
watcher = c.Win32_VolumeChangeEvent.watch_for()
try:
while True:
event = watcher()
drive = event.DriveName
event_type = event.EventType
if event_type == 2: # 挿入
log_event(f"🔌 USB挿入: {drive}")
copy_from_usb_to_desktop(drive)
elif event_type == 3: # 抜去
log_event(f"🔌 USB抜去: {drive}")
except KeyboardInterrupt:
print("\n[!] 監視終了〜おつかれさま🎀")