# Automatiser une sauvegarde Windows avec Robocopy

# Sauvegarde mensuelle avec Robocopy

## 1. Objectif

Mettre en place une sauvegarde automatique mensuelle sous Windows 10/11 qui :

- copie les fichiers d'un dossier source
- crée un dossier de sauvegarde par mois
- conserve uniquement les 6 derniers mois
- fonctionne automatiquement via le Planificateur de tâches

---

## 2. Architecture

Le système repose sur trois éléments :

```
Planificateur de tâches
         ↓
       .bat
         ↓
 Script PowerShell
         ↓
      Robocopy
```

---

## 3. Dossiers utilisés

**Dossier source**

```
C:\DossierASauvegarder
```

Contient les fichiers à sauvegarder.

**Dossier de destination**

```
C:\DossierDeDestinationDeSauvegarde
```

Une fois peuplé, le dossier ressemble à ceci :

```
DossierDeDestinationDeSauvegarde
│
├── 2026-01
├── 2026-02
├── 2026-03
├── 2026-04
├── 2026-05
├── 2026-06
│
└── backup_2026-06.log
```

Chaque sous-dossier correspond à une sauvegarde mensuelle.

---

## 4. Script PowerShell

**Fichier :** `C:\Scripts\backup_mensuel.ps1`

```powershell
$Source = "C:\DossierASauvegarder"
$BackupRoot = "C:\DossierDeDestinationDeSauvegarde"
$Now = Get-Date
$MonthFolder = $Now.ToString("yyyy-MM")
$Dest = Join-Path $BackupRoot $MonthFolder

New-Item -ItemType Directory -Path $Dest -Force | Out-Null

$LogFile = Join-Path $BackupRoot "backup_$MonthFolder.log"

robocopy `
    $Source `
    $Dest `
    /E `
    /XO `
    /R:2 `
    /W:5 `
    /Z `
    /FFT `
    /XA:H `
    /LOG:$LogFile

$LimitMonth = (Get-Date).AddMonths(-6)
Get-ChildItem $BackupRoot -Directory |
Where-Object {
    $_.Name -match '^\d{4}-\d{2}$' -and
    ([datetime]::ParseExact($_.Name, 'yyyy-MM', $null)) -lt $LimitMonth
} |
Remove-Item -Recurse -Force
```

**Options Robocopy**

| Option  | Description                          |
|---------|--------------------------------------|
| `/E`    | Copie tous les sous-dossiers         |
| `/XO`   | Ignore les fichiers plus anciens     |
| `/R:2`  | 2 tentatives en cas d'erreur         |
| `/W:5`  | Attente de 5 secondes entre tentatives |
| `/Z`    | Mode redémarrable                    |
| `/FFT`  | Compatibilité systèmes de fichiers   |
| `/XA:H` | Ignore les fichiers cachés           |

---

## 5. Fonctionnement du script

**Création du dossier mensuel**

Le script génère automatiquement un dossier basé sur la date courante au format `YYYY-MM`. Exemple : `2026-03`.

**Nettoyage des anciennes sauvegardes**

Le script conserve uniquement les 6 derniers mois et supprime automatiquement les dossiers plus anciens. Exemple de dossiers conservés :

```
2025-12
2026-01
2026-02
2026-03
2026-04
2026-05
```

---

## 6. Fichier batch

**Fichier :** `C:\Scripts\backup_mensuel.bat`

```bat
@echo off
powershell.exe -ExecutionPolicy Bypass -File "C:\Scripts\backup_mensuel.ps1"
```

Rôle : lance le script PowerShell et sert de point d'entrée pour le Planificateur de tâches.

---

## 7. Planification automatique

1. Ouvrir le **Planificateur de tâches**
2. Créer une nouvelle tâche
3. Cocher :
   - **Exécuter même si l'utilisateur n'est pas connecté**
   - **Exécuter avec les autorisations maximales**
4. **Déclencheur :** choisir l'intervalle souhaité
5. **Action :**
   - Programme : `C:\Scripts\backup_mensuel.bat`
   - Arguments : *(vide)*

---

## 8. Logs

Chaque exécution génère un fichier log au format `backup_YYYY-MM.log`. Exemple : `backup_2026-03.log`

Ce fichier contient :

- les fichiers copiés
- les fichiers ignorés
- les erreurs éventuelles

---

## 9. Tests recommandés

Avant la première utilisation, exécuter manuellement :

```bat
backup_mensuel.bat
```

Puis vérifier :

- la création du dossier mensuel
- la copie des fichiers
- la génération du log

---

## 10. Maintenance

Vérifier occasionnellement :

- l'espace disque disponible
- la présence des logs
- le bon fonctionnement de la tâche planifiée