Le script
param([string]$Source = "$HOME\Pictures\Import", [string]$Cible = "$HOME\Pictures\Triées", [switch]$Simulation)
Get-ChildItem $Source -File -Include *.jpg, *.jpeg, *.heic, *.png, *.mp4 -Recurse | ForEach-Object {
$dossier = Join-Path $Cible ("{0:yyyy}\{0:MM}" -f $_.LastWriteTime)
$dest = Join-Path $dossier $_.Name; $n = 1
while (Test-Path $dest) { $dest = Join-Path $dossier ("{0}-{1}{2}" -f $_.BaseName, $n++, $_.Extension) }
if ($Simulation) { "$($_.Name) → $dest" }
else { New-Item $dossier -ItemType Directory -Force | Out-Null; Move-Item $_ $dest }
}La date de modification peut différer de la date de prise de vue (copies) ; pour la date EXIF, utilisez l'outil ExifTool ou la propriété « Prise de vue » via le Shell. Faites une copie de sauvegarde avant. Bases : premier script.