This commit is contained in:
2025-11-04 09:36:26 +01:00
parent 4131557887
commit d091312d0f
18 changed files with 9243 additions and 2 deletions

View File

@@ -0,0 +1,80 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Find the latest Medicus backup (.fbk or .zip) in the given folder.
If the newest backup is a ZIP, extract the .fbk into Z:\Medicus 3\restore.
Before extraction, the restore folder is fully cleared.
Prints the full path to the resulting .fbk file (for batch usage).
"""
import re
import zipfile
import shutil
from pathlib import Path
from datetime import datetime
# ========================================
# 🔧 CONFIGURATION
# ========================================
BACKUP_DIR = Path(r"G:\OnedriveOrdinace\OneDrive\MedicusBackup") # ✅ your real backup location
RESTORE_DIR = Path(r"Z:\\Medicus 3\\restore") # destination folder for .fbk
RESTORE_DIR.mkdir(parents=True, exist_ok=True)
# ========================================
# 🧹 1) Clean restore folder
# ========================================
print(f"🧹 Cleaning folder: {RESTORE_DIR}")
for item in RESTORE_DIR.iterdir():
try:
if item.is_file() or item.is_symlink():
item.unlink()
elif item.is_dir():
shutil.rmtree(item)
except Exception as e:
print(f"⚠️ Cannot delete {item}: {e}")
# ========================================
# 🔍 2) Find newest backup file
# ========================================
pattern = re.compile(r"Medicus_(\d{6})_(\d{4})\.(fbk|zip)$", re.IGNORECASE)
candidates = []
for f in BACKUP_DIR.iterdir():
m = pattern.match(f.name)
if m:
yymmdd, hhmm, ext = m.groups()
ts = datetime.strptime("20" + yymmdd + hhmm, "%Y%m%d%H%M")
candidates.append((ts, f))
if not candidates:
raise SystemExit("❌ No Medicus backup files found in folder!")
candidates.sort(key=lambda x: x[0], reverse=True)
latest_time, latest_file = candidates[0]
print(f"🕒 Latest backup: {latest_file.name} ({latest_time})")
# ========================================
# 📦 3) Extract or use directly
# ========================================
if latest_file.suffix.lower() == ".zip":
with zipfile.ZipFile(latest_file, "r") as zf:
fbk_files = [n for n in zf.namelist() if n.lower().endswith(".fbk")]
if not fbk_files:
raise SystemExit("❌ ZIP file does not contain any .fbk!")
fbk_name = Path(fbk_files[0]).name
out_path = RESTORE_DIR / fbk_name
print(f"📂 Extracting {fbk_name}{out_path}")
zf.extract(fbk_files[0], RESTORE_DIR)
final_fbk = out_path
else:
out_path = RESTORE_DIR / latest_file.name
print(f"📋 Copying {latest_file}{out_path}")
shutil.copy2(latest_file, out_path)
final_fbk = out_path
# ========================================
# ✅ 4) Output final .fbk path for the batch file
# ========================================
print(final_fbk)