Last active
October 26, 2023 19:24
-
-
Save Pomdre/af4fd63caf02cc232c0b90e4a51ed058 to your computer and use it in GitHub Desktop.
Image organiser/sorting script for windows
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@REM This is a script for taking Files in src_folder and move them to dest_root_folder organised under the year and month the image or file was created. | |
@REM For the best preformence install exiftool by Phil Harvey othervise it would use the file's modification date. | |
@echo off | |
setlocal enabledelayedexpansion | |
rem Source folder containing images | |
set "src_folder=C:\Uploads\Camera" | |
rem Destination folder for organizing images | |
set "dest_root_folder=C:\Uploads\Camera\Sorted" | |
rem Create destination root folder if it doesn't exist | |
if not exist "%dest_root_folder%" mkdir "%dest_root_folder%" | |
rem Loop through each image file in the source folder | |
for %%I in ("%src_folder%\*.jpg" "%src_folder%\*.jpeg" "%src_folder%\*.png" "%src_folder%\*.gif" "%src_folder%\*.mp4" "%src_folder%\*.heic" "%src_folder%\*.heif" "%src_folder%\*.dng") do ( | |
if exist "%%~I" ( | |
rem Initialize variables for date | |
set "creation_date=" | |
rem Try to extract DateTimeOriginal using ExifTool | |
for /f %%A in ('exiftool -d "%%Y-%%m" -p "$DateTimeOriginal" "%%~I" 2^>nul') do ( | |
set "creation_date=%%A" | |
) | |
rem If DateTimeOriginal is not defined, try to extract 'Changed' date using ExifTool | |
if not defined creation_date ( | |
for /f %%A in ('exiftool -d "%%Y-%%m" -p "$FileModifyDate" "%%~I" 2^>nul') do ( | |
set "creation_date=%%A" | |
) | |
) | |
rem If neither DateTimeOriginal nor 'Changed' date is available, use the file's modification date | |
if not defined creation_date ( | |
for /f %%A in ('powershell -command "(Get-Item '%%~I').CreationTime.ToString('yyyy-MM')"') do ( | |
set "creation_date=%%A" | |
) | |
) | |
rem Check if a date was successfully retrieved | |
if defined creation_date ( | |
rem Split the creation_date into year and month | |
for /f "tokens=1,2 delims=-" %%Y in ("!creation_date!") do ( | |
set "year=%%Y" | |
set "month=%%Z" | |
rem Create the year folder inside the destination root folder if it doesn't exist | |
set "dest_year_folder=!dest_root_folder!\!year!" | |
if not exist "!dest_year_folder!" mkdir "!dest_year_folder!" | |
rem Create the month folder inside the year folder if it doesn't exist | |
set "dest_month_folder=!dest_year_folder!\!month!" | |
if not exist "!dest_month_folder!" mkdir "!dest_month_folder!" | |
rem Move the image to the month folder | |
move "%%~I" "!dest_month_folder!\" | |
echo Moved "%%~I" to "!dest_month_folder!\" | |
) | |
) else ( | |
echo Failed to extract creation date from "%%~I" | |
) | |
) | |
) | |
echo Organizing complete. | |
pause |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment