Organizar fotos digitales de años...

Buenas.

Supongo que como muchos, tengo miles de fotos personales a medio clasificar en carpetas.

Algunas ponen el año, o las vacaciones en que fueron tomadas, pero otras no. Además, algunas conservan los metadatos EXIF y otras no.

Había pensado en organizarlas por años y meses, sin poner carpetas para cada evento, porque puede ser un trabajo de chinos. He pensado en utilizar la información EXIF para clasificarlas, pero ya os digo que unas tienen y otras no. Cuando lo haya hecho, borraré muchas, pero antes he de clasificarlas.

¿Cómo lo hacéis para organizar vuestras fotos? ¿Algún programa o método en especial?

Gracias y saludos!
Prueba con las siguientes aplicaciones:
XnView
AmoK Exif Sorter
Namexif (Windows)
Rename to EXIF date (GNU/Linux)
Newton escribió:Prueba con las siguientes aplicaciones:
XnView
AmoK Exif Sorter
Namexif (Windows)
Rename to EXIF date (GNU/Linux)


[beer]
Yo anduve buscando programa spara ordenar las fotos, y el caso es que por una cosa o por otra ninguno satisfacia mis necesidades, asi que me hice un pequeño programa .BAT que usase la utilidad gratuita EXIV2.EXE que obtiene los datos exif del fichero JPG y lo ordena segun su fecha. si no tiene exift va a una carpeta llamada 0000

El programa genera una estructura de carpetas del tipo año\mes o año\01 enero

año1
+--- 01
+---02
año2
+---05
+---06
...

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

IF NOT EXIST "%~dp0EXIV2.EXE" (
   ECHO.
   ECHO ERROR: No se encuentra "%~dp0EXIV2.EXE". Imposible continuar
   GOTO _FIN
)

SET PATH=%PATH%;%~dp0
SET NOMBRETMP=_%TIME:~1,1%%TIME:~3,2%%TIME:~6,2%%TIME:~9,2%%RANDOM%
SET TOTAL=0
SET CON_EXIF=0
SET SIN_EXIF=0
SET MESES=SI

CLS
TITLE %~nx0 "%CD%
ECHO.
ECHO Tratando los ficheros *.JPG de "%CD%"
ECHO --------------------------------------------------------------------------------
ECHO.

FOR %%j IN (*.jpg) DO (
   SET /A TOTAL=!TOTAL!+1
   SET NOMBRE="%%j"
   CALL :_FECHA_EXIF
   IF NOT [!FECHA_EXIF!]==[] (
      SET /A CON_EXIF=!CON_EXIF!+1
      SET NUEVO="!YYYY!!MM!!DD!_!HORA!!MIN!!SEG!.jpg"
      IF /i NOT [!NOMBRE!]==[!NUEVO!] (
         ECHO   !NOMBRE!      Renombrado a !NUEVO!
         REN !NOMBRE! !NUEVO!
         SET NOMBRE=!NUEVO!
      )
      CALL :_RUTA_JPG
      MOVE !NOMBRE! !RUTA_JPG! > NUL
      ECHO   !NOMBRE!      Movido a la carpeta !RUTA_JPG!
   ) ELSE (
      SET /A SIN_EXIF=!SIN_EXIF!+1
      ECHO   !NOMBRE!      No contiene fecha EXIF valida
      IF NOT EXIST 0000\NUL MKDIR 0000
      MOVE !NOMBRE! 0000\!NOMBRE! > NUL
      ECHO   !NOMBRE!      Movido a la carpeta ".\0000"
   )
)
IF %TOTAL% GTR 0 (
   ECHO.
   ECHO --------------------------------------------------------------------------------
   ECHO.
   ECHO Tratados %TOTAL% ficheros JPG, de los cuales:
   ECHO    %CON_EXIF% archivos si tenian una fecha correcta
   ECHO    %SIN_EXIF% archivos no tenian una fecha correcta
   ECHO.
   ECHO Proceso finalizado.
) ELSE (
   CLS
   ECHO.
   ECHO No hay ficheros *.JPG a tratar en
   ECHO "%CD%"
)
ECHO.
TITLE %~nx0 - Proceso finalizado
GOTO _FIN


:_FECHA_EXIF
SET FECHA_EXIF=
START /B /LOW /WAIT EXIV2.EXE -g Exif.Photo.DateTimeOriginal %NOMBRE% > %NOMBRETMP%.txt
FOR /F "tokens=* " %%a IN (%NOMBRETMP%.txt) DO SET FECHA_EXIF=%%a
DEL %NOMBRETMP%.txt > NUL
SET YYYY=%FECHA_EXIF:~-19,4%
SET MM=%FECHA_EXIF:~-14,2%
SET DD=%FECHA_EXIF:~-11,2%
SET HORA=%FECHA_EXIF:~-8,2%
SET MIN=%FECHA_EXIF:~-5,2%
SET SEG=%FECHA_EXIF:~-2,2%
EXIT /B


:_RUTA_JPG
IF [%MESES%]==[SI] (
   IF [%MM%]==[01] SET MES=01 Enero
   IF [%MM%]==[02] SET MES=02 Febrero
   IF [%MM%]==[03] SET MES=03 Marzo
   IF [%MM%]==[04] SET MES=04 Abril
   IF [%MM%]==[05] SET MES=05 Mayo
   IF [%MM%]==[06] SET MES=06 Junio
   IF [%MM%]==[07] SET MES=07 Julio
   IF [%MM%]==[08] SET MES=08 Agosto
   IF [%MM%]==[09] SET MES=09 Septiembre
   IF [%MM%]==[10] SET MES=10 Octubre
   IF [%MM%]==[11] SET MES=11 Noviembre
   IF [%MM%]==[12] SET MES=12 Diciembre
) ELSE (
   SET MES=%MM%
)
SET RUTA_JPG=".\%YYYY%\%MES%\%DD%"
IF NOT EXIST "%YYYY%\NUL"            MKDIR "%YYYY%"
IF NOT EXIST "%YYYY%\%MES%\NUL"      MKDIR "%YYYY%\%MES%"
IF NOT EXIST "%YYYY%\%MES%\%DD%\NUL" MKDIR "%YYYY%\%MES%\%DD%"
EXIT /B


:_FIN
ENDLOCAL
PAUSE > NUL
jb_______ escribió:Yo anduve buscando programa spara ordenar las fotos, y el caso es que por una cosa o por otra ninguno satisfacia mis necesidades, asi que me hice un pequeño programa .BAT que usase la utilidad gratuita EXIV2.EXE que obtiene los datos exif del fichero JPG y lo ordena segun su fecha. si no tiene exift va a una carpeta llamada 0000



Genial! Muchas gracias por compartirlo!!!!
jb_______ escribió:Yo anduve buscando programa spara ordenar las fotos, y el caso es que por una cosa o por otra ninguno satisfacia mis necesidades, asi que me hice un pequeño programa .BAT que usase la utilidad gratuita EXIV2.EXE que obtiene los datos exif del fichero JPG y lo ordena segun su fecha. si no tiene exift va a una carpeta llamada 0000

El programa genera una estructura de carpetas del tipo año\mes o año\01 enero

año1
+--- 01
+---02
año2
+---05
+---06
...

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

IF NOT EXIST "%~dp0EXIV2.EXE" (
   ECHO.
   ECHO ERROR: No se encuentra "%~dp0EXIV2.EXE". Imposible continuar
   GOTO _FIN
)

SET PATH=%PATH%;%~dp0
SET NOMBRETMP=_%TIME:~1,1%%TIME:~3,2%%TIME:~6,2%%TIME:~9,2%%RANDOM%
SET TOTAL=0
SET CON_EXIF=0
SET SIN_EXIF=0
SET MESES=SI

CLS
TITLE %~nx0 "%CD%
ECHO.
ECHO Tratando los ficheros *.JPG de "%CD%"
ECHO --------------------------------------------------------------------------------
ECHO.

FOR %%j IN (*.jpg) DO (
   SET /A TOTAL=!TOTAL!+1
   SET NOMBRE="%%j"
   CALL :_FECHA_EXIF
   IF NOT [!FECHA_EXIF!]==[] (
      SET /A CON_EXIF=!CON_EXIF!+1
      SET NUEVO="!YYYY!!MM!!DD!_!HORA!!MIN!!SEG!.jpg"
      IF /i NOT [!NOMBRE!]==[!NUEVO!] (
         ECHO   !NOMBRE!      Renombrado a !NUEVO!
         REN !NOMBRE! !NUEVO!
         SET NOMBRE=!NUEVO!
      )
      CALL :_RUTA_JPG
      MOVE !NOMBRE! !RUTA_JPG! > NUL
      ECHO   !NOMBRE!      Movido a la carpeta !RUTA_JPG!
   ) ELSE (
      SET /A SIN_EXIF=!SIN_EXIF!+1
      ECHO   !NOMBRE!      No contiene fecha EXIF valida
      IF NOT EXIST 0000\NUL MKDIR 0000
      MOVE !NOMBRE! 0000\!NOMBRE! > NUL
      ECHO   !NOMBRE!      Movido a la carpeta ".\0000"
   )
)
IF %TOTAL% GTR 0 (
   ECHO.
   ECHO --------------------------------------------------------------------------------
   ECHO.
   ECHO Tratados %TOTAL% ficheros JPG, de los cuales:
   ECHO    %CON_EXIF% archivos si tenian una fecha correcta
   ECHO    %SIN_EXIF% archivos no tenian una fecha correcta
   ECHO.
   ECHO Proceso finalizado.
) ELSE (
   CLS
   ECHO.
   ECHO No hay ficheros *.JPG a tratar en
   ECHO "%CD%"
)
ECHO.
TITLE %~nx0 - Proceso finalizado
GOTO _FIN


:_FECHA_EXIF
SET FECHA_EXIF=
START /B /LOW /WAIT EXIV2.EXE -g Exif.Photo.DateTimeOriginal %NOMBRE% > %NOMBRETMP%.txt
FOR /F "tokens=* " %%a IN (%NOMBRETMP%.txt) DO SET FECHA_EXIF=%%a
DEL %NOMBRETMP%.txt > NUL
SET YYYY=%FECHA_EXIF:~-19,4%
SET MM=%FECHA_EXIF:~-14,2%
SET DD=%FECHA_EXIF:~-11,2%
SET HORA=%FECHA_EXIF:~-8,2%
SET MIN=%FECHA_EXIF:~-5,2%
SET SEG=%FECHA_EXIF:~-2,2%
EXIT /B


:_RUTA_JPG
IF [%MESES%]==[SI] (
   IF [%MM%]==[01] SET MES=01 Enero
   IF [%MM%]==[02] SET MES=02 Febrero
   IF [%MM%]==[03] SET MES=03 Marzo
   IF [%MM%]==[04] SET MES=04 Abril
   IF [%MM%]==[05] SET MES=05 Mayo
   IF [%MM%]==[06] SET MES=06 Junio
   IF [%MM%]==[07] SET MES=07 Julio
   IF [%MM%]==[08] SET MES=08 Agosto
   IF [%MM%]==[09] SET MES=09 Septiembre
   IF [%MM%]==[10] SET MES=10 Octubre
   IF [%MM%]==[11] SET MES=11 Noviembre
   IF [%MM%]==[12] SET MES=12 Diciembre
) ELSE (
   SET MES=%MM%
)
SET RUTA_JPG=".\%YYYY%\%MES%\%DD%"
IF NOT EXIST "%YYYY%\NUL"            MKDIR "%YYYY%"
IF NOT EXIST "%YYYY%\%MES%\NUL"      MKDIR "%YYYY%\%MES%"
IF NOT EXIST "%YYYY%\%MES%\%DD%\NUL" MKDIR "%YYYY%\%MES%\%DD%"
EXIT /B


:_FIN
ENDLOCAL
PAUSE > NUL



Ostras, justo buscaba algo así. Cómo funciona tu programa? Se copia ese texto y se pega en Símbolo del sistema?
Crea un archivo de texto con extension .bat y lo copias en la carpeta donde estan las fotos.
Luego haces doble click sobre el icono del archivo *.bat y coloca las fotos de esa carpeta de forma autonmatica.

Se podria modificar para que pida la ruta de trabajo y/o si quieres que cree las carpetas de los meeses los meses con nombre o solo con numero en lugar de usar una variable interna, pero para mis necesidades era mas practico segun esta.

Para que todo funcione bien, hay que copiar el fichero exiv2.exe en al carpeta C:\Windows

Yo tengo uan version antigua que va todo incluido en un EXE, pero las nuevas, usan varios ficheros DLL que tambien deben ser copiados en la carpeta C:\Windows
Muchas gracias por las explicación y por el bat @jb_______
7 respuestas