Ms-Dos - Renombrar ficheros por fecha de captura

 
Vista:
sin imagen de perfil
Val: 4
Ha aumentado su posición en 4 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Renombrar ficheros por fecha de captura

Publicado por Ruben (2 intervenciones) el 17/04/2020 17:32:53
Buenas tardes.

Quería hacer un .bat que renombre todas las fotografías de una carpeta, usando para ello la fecha de captura de la fotografía quedando un nombre compuesto por aaaammddhhmiss.*. Actualmente uso un programa comercial en el que debo importar las fotografías y realizar dicha acción. Creo que con un bat sería mucho más sencillo.

Actualmente tengo IMG0000.* --> 20200417172832.* (jpg,raw,avi).

El problema que no se mucho de batch y no sé como pasar la fecha de creación de los ficheros a las variables.

Muchísimas gracias por vuestra ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Renombrar ficheros por fecha de captura

Publicado por Antoni Masana (811 intervenciones) el 23/04/2020 16:44:02
Este BAT te renombra los ficheros con extensión JPG RAW y AVI a la fecha y hora de modificación que es la que sale en la ventana del CMD.

Como no se ven los segundos, le he puesto 00 y si ya existe un fichero con la misma fecha y hora podrá 01 y así hasta el 99, espero que no tengas tantos ficheros con la misma fecha y hora porque entonces empezara un problema.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo off
For %%a in (*.jpg *.raw *.avi) do Call :Renombra %%~na %%~xa %%~ta
goto :eof
 
:Renombra
    set Nom=%1
    set Ext=%2
    set Fec=%3
    set Hor=%4
    set Seg=899
 
    set Fech=%Fec:~6,4%%Fec:~3,2%%Fec:~0,2%
:Otro
    set /A Seg+=1
    set Hora=%Hor:~0,2%%Hor:~3,2%%Seg:~1%
 
    IF exist %Fech%%Hora%%Ext% goto Otro
 
    Ren %Nom%%Ext% %Fech%%Hora%%Ext%
    goto :EOF

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 4
Ha aumentado su posición en 4 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Renombrar ficheros por fecha de captura

Publicado por Ruben (2 intervenciones) el 24/04/2020 11:11:39
Buenos días.

Estaba buscando una idea para acceder a la fecha de captura de las fotos ya que, sabía como usar la fecha del sistema, pero no la de creación de los archivos. Con este código usaría la fecha de modificación del archivo. Puesto que lo que necesito es un nombre único y cronológico, esta solución me funciona a la perfección.

Mil gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 4
Ha disminuido su posición en 4 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Renombrar ficheros por fecha de captura

Publicado por Sergi (4 intervenciones) el 10/12/2020 15:12:07
Buenas, antes de ver este código estaba intentando renombrar todas las imágenes y vídeos que tengo en una carpeta pero me quede encallado en un sitio. Al ver este código he intentado adaptar el mio cambiando el for por la ruta de los archivo pero no funciona.

En el código que he empezado, la parte del for pongo la ruta para que me lea todos los archivos y lo lee bien. El problema que tengo es que donde tengo la parte que pregunto si existe quiero que me incremente el valor de i pero lo he hecho con un goto pero creo que esta mal. Creo que con algún for se podría hacer pero no me sale. Alguna idea?

1
2
3
@echo off
setlocal enabledelayedexpansion
set i=0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FOR %%X IN (C:\Users\bob\Desktop\fotos\*) DO (
set fecha=%%~tx
set ano=!fecha:~6,4!
set mes=!fecha:~3,2!
set dia=!fecha:~0,2!
set ruta=%%~px
set nombrearchivo=%%x
:inicio
IF EXIST "!ruta!!ano!-!mes!-!dia!-!i!"(
    0et /A i+=1
    goto inicio
) ELSE (
    move /-Y "!nombrearchivo" "!ruta!!ano!-!mes!-!dia!-!i!"
    set a=0)
)

Aun le falta poner la extensión del archivo.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Renombrar ficheros por fecha de captura

Publicado por Antoni Masana (811 intervenciones) el 10/12/2020 15:20:29
He realizado algunos cambios a ver si te funciona.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off
setlocal enabledelayedexpansion
set i=0
FOR %%x IN (C:\Users\bob\Desktop\fotos\*.*) DO Call :Rutina %%~px %%x %%~tx
goto :EOF
 
:Rutina
    set ruta=%1
    set nombrearchivo=%2
    set fecha=%3
    set ano=!fecha:~6,4!
    set mes=!fecha:~3,2!
    set dia=!fecha:~0,2!
:Inicio
    IF EXIST "!ruta!!ano!-!mes!-!dia!-!i!"(
        0et /A i+=1
        goto inicio
    ) ELSE (
        move /-Y "!nombrearchivo" "!ruta!!ano!-!mes!-!dia!-!i!"
        set a=0)
    )


Si la ruta o el nombre del fichero tiene espacios no funciona y hay que hacer un pequeño truco.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@echo off
setlocal enabledelayedexpansion
set i=0
FOR %%x IN (C:\Users\bob\Desktop\fotos\*.*) DO Call :Rutina "%%~px" "%%x"  %%~tx
goto :EOF
 
:Rutina
    set ruta=%1
    set ruta=!ruta:~1,-1!
    set nombrearchivo=%2
    set nombrearchivo=!nombrearchivo:~1,-1!
    set fecha=%3
    set ano=!fecha:~6,4!
    set mes=!fecha:~3,2!
    set dia=!fecha:~0,2!
:Inicio
    IF EXIST "!ruta!!ano!-!mes!-!dia!-!i!"(
        0et /A i+=1
        goto inicio
    ) ELSE (
        move /-Y "!nombrearchivo" "!ruta!!ano!-!mes!-!dia!-!i!"
        set a=0)
    )


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 4
Ha disminuido su posición en 4 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Renombrar ficheros por fecha de captura

Publicado por sergi (4 intervenciones) el 10/12/2020 23:18:03
Mil gracias, funciona casi todo, el único problemilla (que creo que esta en el "move") es que cambia el nombre i todo perfecto, pero le falta la extensión. Mañana seguiré mirándolo.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Renombrar ficheros por fecha de captura

Publicado por Antoni Masana (811 intervenciones) el 11/12/2020 08:42:27
Faltan un par de detalles o alguno más:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off
setlocal enabledelayedexpansion
FOR %%x IN (C:\Users\bob\Desktop\fotos\*.*) DO Call :Rutina "%%~px" "%%x"   %%~xx %%~tx
goto :EOF
 
:Rutina
    set i=0
    set ruta=%1
    set ruta=!ruta:~1,-1!
    set Nombre_Archivo=%2
    set Nombre_Archivo=!Nombre_Archivo:~1,-1!
    set Extension=%3
    set fecha=%4
    set ano=!fecha:~6,4!
    set mes=!fecha:~3,2!
    set dia=!fecha:~0,2!
:Inicio
    Set Destino=!ruta!!ano!-!mes!-!dia!-!i!!Extension!
    IF EXIST "!Destino!"(
        set /A i+=1
        goto inicio
    )
    move /-Y "!Nombre_Archivo!" "!Destino!"
    goto :EOF

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 4
Ha disminuido su posición en 4 puestos en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Renombrar ficheros por fecha de captura

Publicado por sergi (4 intervenciones) el 11/12/2020 21:04:57
Gracias de nuevo, ahora va perfecto! El programa peta por que le falta un espacio en la fila del IF EXIST entre las comitas y paréntesis, pero una vez arreglado va genial.
He probado de poner en el FOR el /R para que haga lo mismo en subcarpetas pero no funciona. Alguna idea?

Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Renombrar ficheros por fecha de captura

Publicado por Antoni Masana (811 intervenciones) el 12/12/2020 13:02:28
Para procesar todo el árbol de directorios:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@echo off
setlocal enabledelayedexpansion
cd C:\Users\bob\Desktop\fotos
dir /S /B /A:D >%Temp%\Arbol_Directorios.tmp
for /F "delims=*" %%a in (%Temp%\Arbol_Directorios.tmp) do (
    FOR %%x IN (%%a\*.*) DO Call :Rutina "%%~px" "%%x"   %%~xx %%~tx
)
del %Temp%\Arbol_Directorios.tmp
goto :EOF
 
:Rutina
    set i=0
    set ruta=%1
    set ruta=!ruta:~1,-1!
    set Nombre_Archivo=%2
    set Nombre_Archivo=!Nombre_Archivo:~1,-1!
    set Extension=%3
    set fecha=%4
    set ano=!fecha:~6,4!
    set mes=!fecha:~3,2!
    set dia=!fecha:~0,2!
:Inicio
    Set Destino=!ruta!!ano!-!mes!-!dia!-!i!!Extension!
    IF EXIST "!Destino!"(
        set /A i+=1
        goto inicio
    )
    move /-Y "!Nombre_Archivo!" "!Destino!"
    goto :EOF


Seguro que hay otras formas de hacerlo y esta es una de ellas.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar