123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- # 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
|