소스 검색

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 4 달 전
부모
커밋
f9b4b0359d
3개의 변경된 파일86개의 추가작업 그리고 1개의 파일을 삭제
  1. 2
    0
      .gitignore
  2. 81
    0
      ArrangePictures.ps1
  3. 3
    1
      README.md

+ 2
- 0
.gitignore 파일 보기

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

+ 81
- 0
ArrangePictures.ps1 파일 보기

@@ -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 파일 보기

@@ -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…
취소
저장