Advertisement
lincruste

Tri d'images corrompues par lot

Jul 12th, 2024 (edited)
366
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PowerShell 2.69 KB | Software | 0 0
  1. # script powershell pour lire tous les fichiers image d'un répertoire et déplacer dans un répertoire nommé CORROMPU les fichiers anormaux
  2. # formats gérés: heic/jpg/tga/tif/raw/png/gif/bmp/exr/webp/jp2/cr2
  3. # Nécessite IDENTIFY.EXE de la suite ImageMagick: https://imagemagick.org/script/download.php
  4.  
  5. Add-Type -AssemblyName System.Windows.Forms
  6. Add-Type -AssemblyName System.Drawing
  7.  
  8. function Select-FolderDialog {
  9.     $folderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
  10.     $dialogResult = $folderBrowser.ShowDialog()
  11.     if ($dialogResult -eq [System.Windows.Forms.DialogResult]::OK) {
  12.         return $folderBrowser.SelectedPath
  13.     } else {
  14.         return $null
  15.     }
  16. }
  17.  
  18. function Scan-Images {
  19.     param (
  20.         [string]$directoryPath,
  21.         [string]$identifyPath
  22.     )
  23.  
  24.     # Start transcript journalisation
  25.     $logFile = Join-Path -Path $directoryPath -ChildPath "scan_log.txt"
  26.     Start-Transcript -Path $logFile
  27.  
  28.     try {
  29.         $corruptedDir = Join-Path -Path $directoryPath -ChildPath "CORROMPU"
  30.         $imageFiles = Get-ChildItem -Path $directoryPath -Include *.exr, *.webp, *.heic, *.jp2, *.jpg, *.cr2, *.jpeg, *.tga, *.tif, *.raw, *.png, *.gif, *.bmp -File -Recurse
  31.  
  32.         $corruptedFound = $false
  33.  
  34.         foreach ($file in $imageFiles) {
  35.             $output = & "$identifyPath" $file.FullName 2>&1
  36.  
  37.             if ($output -match "corrupt" -or $output -match "Corrupt" -or $output -match "ERROR") {
  38.                 if (-not (Test-Path -Path $corruptedDir)) {
  39.                     New-Item -ItemType Directory -Path $corruptedDir | Out-Null
  40.                 }
  41.                 Move-Item -Path $file.FullName -Destination $corruptedDir
  42.                 $corruptedFound = $true
  43.                 Write-Output "Moved corrupted file: $($file.FullName) to $corruptedDir"
  44.             }
  45.         }
  46.  
  47.         if (-not $corruptedFound) {
  48.             Write-Output "No corrupted files found."
  49.         }
  50.     } catch {
  51.         Write-Error "An error occurred: $_"
  52.     } finally {
  53.         # fin de journalisation
  54.         Stop-Transcript
  55.     }
  56.       [System.Windows.Forms.MessageBox]::Show("Tri terminé.", "Information", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)
  57. }
  58.  
  59. # looogique
  60. $scriptDir = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
  61. # construction du chemin d'identify à partir de l'emplacement où est le script powershell
  62. $identifyExePath = Join-Path -Path $scriptDir -ChildPath "identify.exe"
  63.  
  64. $selectedFolder = Select-FolderDialog
  65. if ($selectedFolder) {
  66.     Scan-Images -directoryPath $selectedFolder -identifyPath $identifyExePath
  67. } else {
  68.     Write-Output "No folder selected."
  69. }
  70.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement