# Demande à l'utilisateur de saisir les chemins source et destination $zipFilePath = Read-Host "Veuillez entrer le chemin de l'archive source" $destinationPath = Read-Host "Veuillez entrer le chemin du dossier destination" # Vérifier si le fichier ZIP existe if (-Not (Test-Path $zipFilePath)) { Write-Host "Le fichier spécifié n'existe pas : $zipFilePath" Pause exit } # Créer un dossier temporaire pour dézipper l'archive $tempFolder = Join-Path (Get-Item $zipFilePath).DirectoryName ((Get-Item $zipFilePath).BaseName + "_temp") # Dézipper l'archive Expand-Archive -Path $zipFilePath -DestinationPath $tempFolder # Extensions d'images et de vidéos $imageVideoExtensions = @("jpg", "jpeg", "mp4", "gif") # Fonction pour obtenir le MimeType d'un fichier function Get-MimeType { param ($filePath) $shell = New-Object -ComObject Shell.Application $folder = $shell.Namespace((Get-Item $filePath).DirectoryName) $item = $folder.ParseName((Get-Item $filePath).Name) $mimeType = $folder.GetDetailsOf($item, 2) # "Type" dans les détails EXIF return $mimeType } # Fonction pour obtenir la date de création d'une image/vidéo function Get-OriginalDate { param ($filePath) $shell = New-Object -ComObject Shell.Application $folder = $shell.Namespace((Get-Item $filePath).DirectoryName) $item = $folder.ParseName((Get-Item $filePath).Name) $dateTaken = $folder.GetDetailsOf($item, 12) # "Date Taken" dans les détails EXIF $dateTaken = [System.Text.RegularExpressions.Regex]::Replace($dateTaken, '[^\x20-\x7E]', '').Trim() $parsedDate = $null if ([datetime]::TryParse($dateTaken, [ref]$parsedDate)) { return $parsedDate } else { return $null } } # Parcourir récursivement le dossier temporaire Get-ChildItem -Path $tempFolder -Recurse -File | ForEach-Object { $file = $_ $extension = $file.Extension.ToLower().TrimStart('.') # Vérifier le MimeType ou l'extension $mimeType = Get-MimeType -filePath $file.FullName $isImageOrVideo = $mimeType.StartsWith("image/") -or $mimeType.StartsWith("video/") -or $extension -in $imageVideoExtensions if ($isImageOrVideo) { # Obtenir la date de création originale $originalDate = Get-OriginalDate -filePath $file.FullName if (-Not $originalDate) { Write-Host "Avertissement : Pas de date de création trouvée pour le fichier $($file.FullName)" } else { # Créer le dossier de destination basé sur l'année et le mois $year = $originalDate.Year $monthNum = $originalDate.Month.ToString("00") $monthName = $originalDate.ToString("MMMM", [System.Globalization.CultureInfo]::GetCultureInfo("fr-FR")) $targetFolder = Join-Path -Path $destinationPath -ChildPath "$year\$monthNum - $monthName" if (-Not (Test-Path $targetFolder)) { New-Item -Path $targetFolder -ItemType Directory | Out-Null } # Copier le fichier dans le dossier de destination Copy-Item -Path $file.FullName -Destination $targetFolder } } } # Supprimer le dossier temporaire Remove-Item -Recurse -Force $tempFolder Write-Host "Dossier temporaire supprimé : $tempFolder" Pause