Browse Source

Initial script.

    This script needs polishing and MAY NOT work.
    It just came out of ChatGPT sweet mama belly.
    In fact, I'm almost sure it doesn't work...
    You won't take my job you dirty ol' bastard machine
    You can't, I don't have one hahaha
master
Figg 1 month ago
parent
commit
f9b4b0359d
3 changed files with 86 additions and 1 deletions
  1. 2
    0
      .gitignore
  2. 81
    0
      ArrangePictures.ps1
  3. 3
    1
      README.md

+ 2
- 0
.gitignore View File

@@ -0,0 +1,2 @@
1
+# Ignore test files
2
+/Test

+ 81
- 0
ArrangePictures.ps1 View File

@@ -0,0 +1,81 @@
1
+# Demande à l'utilisateur de saisir les chemins source et destination
2
+$zipFilePath = Read-Host "Veuillez entrer le chemin de l'archive source"
3
+$destinationPath = Read-Host "Veuillez entrer le chemin du dossier destination"
4
+
5
+# Vérifier si le fichier ZIP existe
6
+if (-Not (Test-Path $zipFilePath)) {
7
+    Write-Host "Le fichier spécifié n'existe pas : $zipFilePath"
8
+    Pause
9
+    exit
10
+}
11
+
12
+# Créer un dossier temporaire pour dézipper l'archive
13
+$tempFolder = Join-Path (Get-Item $zipFilePath).DirectoryName ((Get-Item $zipFilePath).BaseName + "_temp")
14
+
15
+# Dézipper l'archive
16
+Expand-Archive -Path $zipFilePath -DestinationPath $tempFolder
17
+
18
+# Extensions d'images et de vidéos
19
+$imageVideoExtensions = @("jpg", "jpeg", "mp4", "gif")
20
+
21
+# Fonction pour obtenir le MimeType d'un fichier
22
+function Get-MimeType {
23
+    param ($filePath)
24
+    $shell = New-Object -ComObject Shell.Application
25
+    $folder = $shell.Namespace((Get-Item $filePath).DirectoryName)
26
+    $item = $folder.ParseName((Get-Item $filePath).Name)
27
+    $mimeType = $folder.GetDetailsOf($item, 2) # "Type" dans les détails EXIF
28
+    return $mimeType
29
+}
30
+
31
+# Fonction pour obtenir la date de création d'une image/vidéo
32
+function Get-OriginalDate {
33
+    param ($filePath)
34
+    $shell = New-Object -ComObject Shell.Application
35
+    $folder = $shell.Namespace((Get-Item $filePath).DirectoryName)
36
+    $item = $folder.ParseName((Get-Item $filePath).Name)
37
+    $dateTaken = $folder.GetDetailsOf($item, 12) # "Date Taken" dans les détails EXIF
38
+    $dateTaken = [System.Text.RegularExpressions.Regex]::Replace($dateTaken, '[^\x20-\x7E]', '').Trim()
39
+    $parsedDate = $null
40
+    if ([datetime]::TryParse($dateTaken, [ref]$parsedDate)) {
41
+        return $parsedDate
42
+    } else {
43
+        return $null
44
+    }
45
+}
46
+
47
+# Parcourir récursivement le dossier temporaire
48
+Get-ChildItem -Path $tempFolder -Recurse -File | ForEach-Object {
49
+    $file = $_
50
+    $extension = $file.Extension.ToLower().TrimStart('.')
51
+
52
+    # Vérifier le MimeType ou l'extension
53
+    $mimeType = Get-MimeType -filePath $file.FullName
54
+    $isImageOrVideo = $mimeType.StartsWith("image/") -or $mimeType.StartsWith("video/") -or $extension -in $imageVideoExtensions
55
+
56
+    if ($isImageOrVideo) {
57
+        # Obtenir la date de création originale
58
+        $originalDate = Get-OriginalDate -filePath $file.FullName
59
+        if (-Not $originalDate) {
60
+            Write-Host "Avertissement : Pas de date de création trouvée pour le fichier $($file.FullName)"
61
+        } else {
62
+            # Créer le dossier de destination basé sur l'année et le mois
63
+            $year = $originalDate.Year
64
+            $monthNum = $originalDate.Month.ToString("00")
65
+            $monthName = $originalDate.ToString("MMMM", [System.Globalization.CultureInfo]::GetCultureInfo("fr-FR"))
66
+            $targetFolder = Join-Path -Path $destinationPath -ChildPath "$year\$monthNum - $monthName"
67
+
68
+            if (-Not (Test-Path $targetFolder)) {
69
+                New-Item -Path $targetFolder -ItemType Directory | Out-Null
70
+            }
71
+
72
+            # Copier le fichier dans le dossier de destination
73
+            Copy-Item -Path $file.FullName -Destination $targetFolder
74
+        }
75
+    }
76
+}
77
+
78
+# Supprimer le dossier temporaire
79
+Remove-Item -Recurse -Force $tempFolder
80
+Write-Host "Dossier temporaire supprimé : $tempFolder"
81
+Pause

+ 3
- 1
README.md View File

@@ -1,3 +1,5 @@
1 1
 # PicturesArrangerScript
2 2
 
3
-Un script Powershell qui trie les fichiers images/vidéos d'une source vers une destination selon une arborescence basée sur leur date de création
3
+Ce script Powershell récupère les fichiers images/vidéos contenus dans une source et les copie dans une destination en les rangeant selon une arborescence <année>/<mois> qui se base sur la date de création des fichiers.
4
+
5
+Je l'utilise pour trier d'un bloc toutes mes données dans mon SSD externe.

Loading…
Cancel
Save