Batch, cambiar nombres de un archivo según sus atributos.

Necesito saber si se puede renombrar unos archivos de video. Tengo unas grabaciones de video en mp4, como se graban en distintos horarios y dias manejan un formato así:

PROGRAMA_1
Capture - 29 agosto 2019 - 07-00-09 a. M. - 00000. Mp4
capture - 29 agosto 2019 - 07-00-09 a. M. - 00001. Mp4
capture - 29 agosto 2019 - 07-00-09 a. M. - 00002. Mp4
lo que conforman 3 hs de grabación de 1 solo programa

Luego continúa grabando de la siguiente manera

PROGRAMA_2
Capture - 29 agosto 2019 - 08-00-04 a. M. - 00000. Mp4
capture - 29 agosto 2019 - 08-00-04 a. M. - 00001. Mp4
Que conforman 2 hs de programa

Lo que necesito es, tomar como valor la fecha y hr, y según eso determinar el nombre del programa grabado, por ej:

Los que se llaman
Capture - 29 agosto 2019 - 07-00-09 a. M. - 00000. Mp4
capture - 29 agosto 2019 - 07-00-09 a. M. - 00001. Mp4
capture - 29 agosto 2019 - 07-00-09 a. M. - 00002. Mp4

Pasen a llamarse
NOMBRE DEL PROGRAMA_1 29-08-19 00000. Mp4
NOMBRE DEL PROGRAMA_1 29-08-19 00001. Mp4
NOMBRE DEL PROGRAMA_1 29-08-19 00002. Mp4

Y el programa que sigue
NOMBRE DEL PROGRAMA_2 29-08-19 00000. Mp4
NOMBRE DEL PROGRAMA_2 29-08-19 00001. Mp4

Lo veo complicado, pero por ahí quizás haya alguna manera de tomar el atributo de la hr de grabación y así poder determinar su nombre.

1 Respuesta

Respuesta
1

Se me ocurre esto:

@echo off
Setlocal EnableDelayedExpansion
set carpeta=D:\Carpeta prueba
set contador=1
set fformat=
for /f "tokens=1,2,3,4,5,* delims=-" %%a in ('dir /b "%carpeta%\capture*00000.mp4"') do (
   call :convfecha %%b
   set actual=%%a-%%b-%%c-%%d-%%e
   set nuevo=NOMBRE DEL PROGRAMA_!contador! !fformat!
   for /f "tokens=6 delims=-" %%y in ('dir /b "%carpeta%\!actual!*.mp4"') do ren "%carpeta%\!actual!-%%y" "!nuevo!%%y"
   set /a contador+=1
   )
goto :eof
:convfecha
set aa=%3
set aa=%aa:~-2%
set i=0
for %%x in (enero febrero marzo abril mayo junio julio agosto septiembre octubre noviembre diciembre) do (
  set /a i+=1 & echo/%2|findstr /i /b "%%x" >nul && call set mm=%%i%%
)
(if 1%mm% LSS 110 set mm=0%mm%)
set fformat=%1_%mm%_%aa%
goto :eof

Tendrías que ajustar la asignación de la variable CARPETA a tus necesidades. He respetado los nombres que pones en los ejemplos (NOMBRE DEL PROGRAMA_1 y NOMBRE DEL PROGRAMA_2) aunque intuyo que sería más razonable un nombre más explícito. He andado de cabeza bastante tiempo porque intentaba sustituir el actual FOR, que realiza el renombrado de los archivos, por un simple comando REN con comodines, pero me encontré que los comodines para ese comando no funcionan como uno se espera (puede verse, en inglés, en: https://superuser.com/questions/475874/how-does-the-windows-rename-command-interpret-wildcards). En particular en este caso, en el que el nombre original contiene puntos intermedios (en "a. M."), me fue imposible encontrar una solución por ese camino.

Acabo de darme cuenta de que el formato de fecha que pretendías era dd-mm-aa y yo lo he preparado para dd_mm_aa. Es bastante obvio que es lo que habría que cambiar en la rutina CONVFECHA.

uff excelente, hizo tal cual lo que se pide. Sinceramente no creí que fuera posible, y me surge una duda relacionado con lo mismo, pero con otros archivos. He hecho grabaciones a lo largo de un buen tiempo, las mismas corresponden a 7 programas distintos, los cuales los horarios detallo más adelante.

Todos tienen este formato de nombre

capture - 28 marzo 2016 - 07-28-33 p. m. - 00000.mp4

capture - 28 marzo 2016 - 07-28-33 p. m. - 00001.mp4

Quisiera saber si es posible que convierta a este formato:

Nombre + dd-mm-yy + Nro de clip+extensión

ej: Nombre 31-12-19 01.mp4

Los videos de 07 a 08 llevan como nombre

  • AMA 28-03-16 01.mp4

Los videos de 08 a 10 llevan como nombre

  • MAÑ 28-03-16 01.mp4

Los videos de 10 a 13 llevan como nombre

  • VOS 28-03-16 01.mp4

Los videos de 13 a 14 llevan como nombre

  • INF 28-03-16 01.mp4

Los videos de 17 a 19 llevan como nombre

  • HXLT 28-03-16 01.mp4

Los videos de 19 a 21 llevan como nombre

  • TUC 28-03-16 01.mp4

Los videos de 21 a 22 llevan como nombre

  • INF 28-03-16 02.mp4

No se si esto debería ir hacia otro post, y sé que está muy relacionado con lo anterior, solo que esta vez los archivos llevan el nombre según a la hr que están grabados. Muchas gracias.

Creo que no importa el nombre que tiene a menos que sirva para tomar como referencia algo de ello, como por ej la hr que marca la grabación, ya que sólo ese atributo sirve para determinar el nombre del video según lo que te pasé

No acabo de entender lo que me dices. Por un lado el formato de los nombres de los vídeos a renombrar es idéntido al de la consulta original, por tanto, si estuvieran en la misma carpeta que los otros dos, el bat los habría renombrado como NOMBRE DE PROGRAMA_i dd/mm/aa nnnnn. Mp4 donde "i" sería un número entero y "nnnnn" el número de orden original. Luego habría que hacer otra pasada para cambiar "NOMBRE DE PROGRAMA_i" por los nombres que propones. Por otro lado si están en una carpeta distinta bastaría rellenar la variable CARPETA con la ubicación de esa otra carpeta y lanzar de nuevo el BAT para que se hiciera el renombrado siguiendo la pauta indicada antes.

Además no entiendo por qué ahora lo que llamas "Nro de clip" es de solo dos cifras (en vez de las cinco de partida), ni por qué empieza en 01 o 02 y no en 00, como en los casos de la consulta original (bueno, en 00000). Esto es importante porque, en contra de tu sugerencia de basarme en la hora para distinguir los programas a los que pertenece cada vídeo, me basé, precisamente, en esa numeración 00000, partiendo de que siempre el primer vídeo de un programa diferente sería el 00000.

Y por último, lo que más me desconcierta es la numeración de los vídeos. Por ejemplo cuando dices "Los videos de 17 a 19 llevan como nombre" ¿qué significan esos números de 17 a 19?

Al revisar lo anterior he entendido por qué hay un 02 en el "Nro de clip" del caso "Los videos de 21 a 22 llevan como nombre" y es que para el caso "Los videos de 13 a 14 llevan como nombre" ya has usado el mismo nombre INF. Entiendo ahora que no es que estés cambiando de cinco a dos cifras la numeración de la parte variable de los vídeos sino que estás introduciendo un nuevo campo, precisamente para salvar casos como el anterior.

Si finalmente he entendido lo que pretendes solo habría que aclarar si estos vídeos estaban en la misma carpeta que los de la consulta original, en cuyo caso ya se habrán renombrado según la pauta indicada más arriba, o están en otra carpeta, en cuyo caso ejecutaríamos el BAT cambiando el valor de la variable CARPETA para que haga ese mismo renombrado. Y por último solo tendrías que indicarme la correspondencia entre NOMBRE DE PROGRAMA_i y el Nombre + Nro clip para que prepare un BAT que haga este segundo renombrado.

Respecto a lo de abrir o no una nueva consulta no lo veo necesario. Nunca he tenido problemas en responder a cualquier cosa aunque la consulta no tuviera nada que ver. Pero sí que la página tiene una limitación en el número de entradas por consulta, que a veces me ha obligado a pedir la apertura de una nueva consulta (pero estamos muy lejos de esa limitación).

Ya me dirás.

¿Has leído mi anterior mensaje? ¿En qué punto estamos?

Hola buen día, te cuento que el script funciona para renombrar los archivos como en la primera consulta, eso por un lado, por otro para no queden dudas, y pido disculpas por no haber sido claro, cuando me refería a Los videos de 07 a 08 llevan como nombre hacía referencia a un segmento de tiempo, en este caso de 07 hs a 08 hs. es decir de 07:00 am a 08:00 am.

Ya cambiados los nombres con el primer script recién ahí me surgió el 2do planteamiento, el cual quería saber si era posible poder adquirir ese atributo (hora de grabación) en el caso del horario de 07:00 am a 08:00 am que lleve el nombre AMA y que siga con el formato mencionado, es decir AMA 28-03-16 01

Nombre + dd-mm-yy + nro de clip (ya que hay programas que son de 2 hs y el clip se divide  en 00000 y 00001)

Lo que creo que es un poco confuso en mi explicación, y por eso intentaré explicarlo nuevamente, es que hay programas en esos lapsos de hora, el cual dependiendo de a la hora que sean grabados, lleven el nombre que deberían, creo que ahí radica la confusión.

Muchas gracias y disculpa la demora en escribirte, no tenía un ordenador a mano estos días.

Todavía tengo algunas dudas. Vamos a trabajar sobre los dos ejemplos concretos que ponías para este segundo "caso":

 Capture - 28 marzo 2016 - 07-28-33 p. m. - 00000. Mp4
 capture - 28 marzo 2016 - 07-28-33 p. m. - 00001. Mp4

Perdón, pensaba escribir bastante más pero le di a "ENVIAR" irreflexivamente. Sigo ahora.

Aquí tenemos dos capturas que se supone que corresponden a partes de un mismo archivo de vídeo, ¿no es así?

¿Cómo deberían renombrarse? ¿Así:?

AMA 28-03-16 01 00000. Mp4
AMA 28-03-16 01 00001. Mp4

¿Quieres un BAT que haga el trabajo desde el principio, es decir sin partir de lo que ya hizo el otro BAT dejando los mp4 con el esquema:

NOMBRE DE PROGRAMA_i dd/mm/aa nnnnn.mp4

Donde "i" sería un número entero y "nnnnn" el número de orden original (00000, 00001,¿etc.)?

¿O podemos partir de este esquema aplicando una tabla con algo así:?

NOMBRE DE PROGRAMA_1 28-03-16 -----> AMA 28-03-16 01
NOMBRE DE PROGRAMA_2 28-03-16 -----> MAÑ 28-03-16 01
NOMBRE DE PROGRAMA_3 28-03-16 -----> VOS 28-03-16 01
NOMBRE DE PROGRAMA_4 28-03-16 -----> INF 28-03-16 01
NOMBRE DE PROGRAMA_5 28-03-16 -----> HXLT 28-03-16 01
NOMBRE DE PROGRAMA_6 28-03-16 -----> TUC 28-03-16 01
NOMBRE DE PROGRAMA_7 28-03-16 -----> INF 28-03-16 02

Me gustaría un bat que haga el trabajo desde el principio, porque el otro Bat me sirve para otras cosas también así como está.


Déjame que te haga una aclaración antes, el programa que uso para grabar, segmenta las grabaciones cada 1 hr, por eso vas a ver mp4 que terminan en 00000 solamente y cuando alguna grabación excede esa hora crea otro mp4 que termina en 00001 y si hay algun programa que sea de 3hs terminará en 00002


Aclarado ese tema, te dejo una captura de como están las grabaciones actualmente.

ves que el formato en el que está dice lo siguiente:

Nombre+Fecha de grabación+Hora de grabación+número correspondiente al clip del programa. Si te sirve también podríamos ir a hacer que el script sea para los archivos que se graban desde las 7 am a 8 am para nombrarlos a todos ellos como AMA 28-03-16 01.mp4 y AMA 28-03-16 02.mp4

Muchas gracias

Todavía no lo tengo claro. Parece que, por un lado, tienes grabaciones/capturas obtenidas diariamente para las que te sirve el BAT del 30 de agosto y que son las que figuran en la lista que me has pasado. A estas no habría que aplicarles ese otro BAT que estás pidiendo. Y por otro lado hay 7 grabaciones antiguas, de 2016, a las que quieres aplicarles otro BAT. Pero si ese otro BAT solo se va a aplicar una vez, a esas grabaciones antiguas, no está muy justificado. Podría hacerse el renombrado incluso de forma manual.

Además no me has aclarado si el renombrado que te proponía:

Capture - 28 marzo 2016 - 07-28-33 p. m. - 00000. Mp4 -----> AMA 28-03-16 01 00000. Mp4
Capture - 28 marzo 2016 - 07-28-33 p. m. - 00001. Mp4 -----> AMA 28-03-16 01 00001. Mp4

es o no el que estás buscando para las grabaciones de 2016. Es importante para despejar de una vez un malentendido latente respecto a lo que llamas "número de clip" porque para mí ese "número de clip" es el 00000, 00001, 00002, etc. y no acabo de encajarlo con ese otro "número de clip" de dos cifras, 01, 02 que usas para esas grabaciones de 2016. Soy consciente de que según la duración del vídeo la captura generará un número variable de archivos mp4 puesto que el proceso de captura genera uno nuevo cuando se cruza la frontera horaria. Es decir que si el vídeo dura una hora o menos solo habrá un 00000, si dos horas o menos habrá 00000 y 00001 y así sucesivamente.

Exactamente, lo que se necesita es que maneje el formato que indicas

Capture - 28 marzo 2016 - 07-28-33 p. m. - 00000.mp4 -----> AMA 28-03-16 01.mp4
Capture - 28 marzo 2016 - 07-28-33 p. m. - 00001.mp4 -----> AMA 28-03-16 02.mp4

Sólo le corregí el final de lo que pusiste, el 00000 no debería ir, se lo reemplazaría por un número 01, 02 etc. No importa el año de los archivos que te mostré, mas viejos mas nuevos, corresponde el mismo cambio para todos.

Lo que no se si se puede, es que, el script vaya a por los archivos generados de 07:00 am a 08:00 am para llamarlos AMA dd-mm-yy 01 o 02 etc

Luego yo modifico si me sale para los archivos de 08:00 am a 10:00 am para llamarlos MAÑ dd-mm-yy 01, 02 etc

No veo la ventaja de cambiar el formato de la numeración, que sería sumarle 1 y truncar el número de cifras a dos cifras en lugar de cinco, pero eso con independencia de la hora que figure en el nombre. En principio no veo impedimento para asignar el nuevo nombre en base a la hora que figura en el nombre de la captura pero eso está en contradicción con lo que decías en tu mensaje del día 31:

Los videos de 13 a 14 llevan como nombre

  • INF 28-03-16 01. Mp4

Los videos de 21 a 22 llevan como nombre

  • INF 28-03-16 02. Mp4

porque para el primer caso podría haber más de un mp4 y, por tanto, habría 01, 02, etc. y para el segundo también podría ocurrir eso y habría que volver a poner 01, 02, etc. con lo cual coincidirían los nombres y no se podría hacer el renombrado. Parece que me quieres decir que si la hora que figura en el nombre de una captura es 13-xx-yy hay que asignar como nombre INF dd-mm-aa y el mismo nombre si esa hora es 21-kk-ll. Por tanto los nuevos nombres coincidirían (al haber desaparecido la referencia a la hora que los hacía diferentes)

Buen día, tenés razón, puede ocasionar algún que otro inconveniente en el caso de INF, y con respecto a la numeracion final de los clips, es solamente para diferenciar el primero del segundo y del tercero en caso que haya un tercer video que continúe con los otros.

Para INF podría ser que la numeración arranque en 01 o de la numeración que sea, la cosa es saber cual es el primer clip y el último

Supongamos que para el INF el vídeo de las 13 a 14 horas tiene tres partes y el de las 21 a 22. ¿Te valdría que se numeraran 01, 02, 03, 04 y 05?

Me ha faltado un poco de texto. Debería decir:

... Y el de las 21 a 22 dos partes.

Tal cual, me sirve esa numeración

Pues prueba con este bat:

@echo off
Setlocal EnableDelayedExpansion
set carpeta=D:\Carpeta prueba
set PROGRAMA_07=AMA
set PROGRAMA_08=MA¥
set PROGRAMA_09=MA¥
set PROGRAMA_10=VOS
set PROGRAMA_11=VOS
set PROGRAMA_12=VOS
set PROGRAMA_13=INF
set PROGRAMA_17=HXLT
set PROGRAMA_18=HXLT
set PROGRAMA_19=TUC
set PROGRAMA_20=TUC
set PROGRAMA_21=INF
set fformat=
set ncinf=0
for /f "tokens=1,2,3,4,5,* delims=-" %%a in ('dir /b "%carpeta%\capture*00000.mp4"') do (
   call :convfecha %%b
   set actual=%%a-%%b-%%c-%%d-%%e
   call :nombrar %%c
   set nuevo=!nuevo! !fformat!
   for /f "tokens=6 delims=-" %%y in ('dir /b "%carpeta%\!actual!*.mp4"') do (
      set nc=%%y
      set /a nc=1!nc:~4,2!-99+!ncinf!
      if !nc! LSS 10 set nc=0!nc!
      ren "%carpeta%\!actual!-%%y" "!nuevo! !nc!.mp4"
      )
   if "%%c"==" 13" set /a ncinf=!nc!
   if "%%c"==" 21" set /a ncinf=0
   )
goto :eof
:convfecha
set aa=%3
set aa=%aa:~-2%
set i=0
for %%x in (enero febrero marzo abril mayo junio julio agosto septiembre octubre noviembre diciembre) do (
  set /a i+=1 & echo/%2|findstr /i /b "%%x" >nul && call set mm=%%i%%
)
(if 1%mm% LSS 110 set mm=0%mm%)
set fformat=%1_%mm%_%aa%
goto :eof
:nombrar
call set nuevo=%%PROGRAMA_%1%%
goto :eof

Como siempre tendrás que ajustar la variable CARPETA a tus necesidades

Hola buenas tardes, te cuento que estuve haciendo un test con archivos de prueba con respecto al trabajo que realizaste, te muestro los resultados:

Primero que nada cambie el símbolo ¥ por N, es decir que quedó MAN

Lo que hace:
capture - 16 julio 2019 - 09-00-00 p. m. - 00000.mp4 >>>>>>>>>> MAN 16_07_19 01.mp4
capture - 16 julio 2019 - 09-00-00 p. m. - 00001.mp4 >>>>>>>>>> MAN 16_07_19 02.mp4
Lo que debería hacer:
capture - 16 julio 2019 - 09-00-00 p. m. - 00000.mp4 >>>>>>>>>> INF 16_07_19 03.mp4
capture - 16 julio 2019 - 09-00-00 p. m. - 00001.mp4 >>>>>>>>>> INF 16_07_19 04.mp4
-----------------------------------------------------------------------------------
Lo que hace:
capture - 16 julio 2019 - 07-27-38 p. m. - 00000.mp4 >>>>>>>>>> AMA 16_07_19 01.mp4
capture - 16 julio 2019 - 07-27-38 p. m. - 00001.mp4 >>>>>>>>>> AMA 16_07_19 02.mp4
Lo que debería hacer:
capture - 16 julio 2019 - 07-27-38 p. m. - 00000.mp4 >>>>>>>>>> TUC 16_07_19 01.mp4
capture - 16 julio 2019 - 07-27-38 p. m. - 00001.mp4 >>>>>>>>>> TUC 16_07_19 02.mp4
-----------------------------------------------------------------------------------
Lo que hace:
capture - 16 julio 2019 - 01-00-06 p. m. - 00000.mp4 >>>>>>>>>> 16_07_19 01.mp4
capture - 16 julio 2019 - 01-00-06 p. m. - 00001.mp4 >>>>>>>>>> 16_07_19 02.mp4
Lo que debería hacer:
capture - 16 julio 2019 - 01-00-06 p. m. - 00000.mp4 >>>>>>>>>> INF 16_07_19 01.mp4
capture - 16 julio 2019 - 01-00-06 p. m. - 00001.mp4 >>>>>>>>>> INF 16_07_19 02.mp4
-----------------------------------------------------------------------------------
Lo que hace:
capture - 19 julio 2019 - 08-01-50 a. m. - 00000.mp4 >>>>>>>>>> MAN 19_07_19 01.mp4
capture - 19 julio 2019 - 08-01-50 a. m. - 00001.mp4 >>>>>>>>>> MAN 19_07_19 02.mp4
Lo que debería hacer:
capture - 19 julio 2019 - 08-01-50 a. m. - 00000.mp4 >>>>>>>>>> AMA 19_07_19 01.mp4
capture - 19 julio 2019 - 08-01-50 a. m. - 00001.mp4 >>>>>>>>>> AMA 19_07_19 01.mp4
-----------------------------------------------------------------------------------
Lo que hace:
capture - 02 agosto 2019 - 05-00-01 p. m. - 00000.mp4 >>>>>>>>>> 02_08_19 01.mp4
capture - 02 agosto 2019 - 05-00-01 p. m. - 00001.mp4 >>>>>>>>>> 02_08_19 02.mp4
Lo que debería hacer:
capture - 02 agosto 2019 - 05-00-01 p. m. - 00000.mp4 >>>>>>>>>> HXLT 02_08_19 01.mp4
capture - 02 agosto 2019 - 05-00-01 p. m. - 00001.mp4 >>>>>>>>>> HXLT 02_08_19 02.mp4
-----------------------------------------------------------------------------------
Lo que hace:
capture - 05 agosto 2019 - 08-00-00 a. m. - 00000.mp4 >>>>>>>>>> MAN 05_08_19 01.mp4
capture - 05 agosto 2019 - 08-00-00 a. m. - 00001.mp4 >>>>>>>>>> MAN 05_08_19 02.mp4
Lo que debería hacer:
capture - 05 agosto 2019 - 08-00-00 a. m. - 00000.mp4 >>>>>>>>>> MAN 05_08_19 01.mp4
capture - 05 agosto 2019 - 08-00-00 a. m. - 00001.mp4 >>>>>>>>>> MAN 05_08_19 02.mp4

Algunos nombres se repiten como verás, tal es el caso de MAN que se repite en varios videos, a excepción de el ultimo que te nombro en la lista que es el único que queda como corresponde.

capture - 05 agosto 2019 - 08-00-00 a. m. - 00000.mp4 >>>>>>>>>> MAN 05_08_19 01.mp4
capture - 05 agosto 2019 - 08-00-00 a. m. - 00001.mp4 >>>>>>>>>> MAN 05_08_19 02.mp4

En primer lugar el carácter ¥ (visto en una ventana de Windows) se "traduce" en una ventana MSDOS en Ñ y habías pedido que el nombre fuera MAÑ, no MAN como sale ahora. De modo que si quieres que sea MAÑ debes reponer el ¥.

En cuanto a la asignación de nombres tienes razón en el sentido de que no he contemplado el "a. m."/"p. m." de las horas. Tendré que retocar el BAT para que contemple esa asignación. Te aviso cuando lo tenga.

De todas formas hay que evitar la indefinición de las "especificaciones" porque si dices por ejemplo:

Los videos de 07 a 08 llevan como nombre
    AMA 28-03-16 01.mp4
Los videos de 08 a 10 llevan como nombre
    MAÑ 28-03-16 01.mp4

¿Qué pasa con los vídeos en que la hora es 08-00-00 a. M.? Cumplirían las dos especificaciones. Yo asumí que en el caso del límite compartido ese límite se asignaba al segundo, es decir que era de 07-00-00 a. M. hasta 07-59-59 a. M. para el primer caso y de 08-00-00 a. M. hasta 09:59:59 a. M. para el segundo caso.

Te paso el BAT corregido:

@echo off
Setlocal EnableDelayedExpansion
set carpeta=D:\Carpeta prueba
set PROGRAMA_07a=AMA
set PROGRAMA_08a=MA¥
set PROGRAMA_09a=MA¥
set PROGRAMA_10a=VOS
set PROGRAMA_11a=VOS
set PROGRAMA_12a=VOS
set PROGRAMA_01p=INF
set PROGRAMA_05p=HXLT
set PROGRAMA_06p=HXLT
set PROGRAMA_07p=TUC
set PROGRAMA_08p=TUC
set PROGRAMA_09p=INF
set fformat=
set ncinf=0
for /f "tokens=1,2,3,4,5,* delims=-" %%a in ('dir /b "%carpeta%\capture*00000.mp4"') do (
   call :convfecha %%b
   set actual=%%a-%%b-%%c-%%d-%%e
   set ap=%%e&set ap=!ap:~3,1!
rem    echo !ap!//%%c!ap!
   call :nombrar %%c!ap!
   set nuevo=!nuevo! !fformat!
   for /f "tokens=6 delims=-" %%y in ('dir /b "%carpeta%\!actual!*.mp4"') do (
      set nc=%%y
      set /a nc=1!nc:~4,2!-99
      if "%%c"==" 09" if !ap!==p set /a nc=!nc!+!ncinf!
      if !nc! LSS 10 set nc=0!nc!
      ren "%carpeta%\!actual!-%%y" "!nuevo! !nc!.mp4"
      )
   if "%%c"==" 01" if !ap!==p set /a ncinf=!nc!
   if "%%c"==" 09" if !ap!==p set /a ncinf=0
   )
goto :eof
:convfecha
set aa=%3
set aa=%aa:~-2%
set i=0
for %%x in (enero febrero marzo abril mayo junio julio agosto septiembre octubre noviembre diciembre) do (
  set /a i+=1 & echo/%2|findstr /i /b "%%x" >nul && call set mm=%%i%%
)
(if 1%mm% LSS 110 set mm=0%mm%)
set fformat=%1_%mm%_%aa%
goto :eof
:nombrar
call set nuevo=%%PROGRAMA_%1%%
goto :eof

Respecto a mi duda con los límites, he mantenido mi criterio anterior porque es más cómodo de tratar (solo hay que revisar la parte de la hora sin necesidad de revisar los minutos y los segundos). Si el criterio fuera incluir el límite superior en cada especificación y excluir el límite inferior (en nuestro ejemplo incluir el 08-00-00 en AMA y empezar el MAÑ en 08-00-01) habría que complicar el tratamiento y solo tendría justificación si se espera que se den casos en que la hora coincida exactamente con esos límites. Entiendo que puedes intentar hacerlo tú y si tienes algún problema te echo una mano.

Se me escapó una línea de depuración. Puedes suprimir la que dice:

rem    echo !ap!//%%c!ap!

Hola buenas día, te cuento que hace todo a la perfección! es impresionante como labura ese script. Si me ha pasado que por ej hay archivos de video que están grabados 1 minuto antes de la hr pactada, en donde el script no los toca directamente. Pero al resto a la perfección, es cosa de corregir ese minuto que falta para redondear la hora y el script entraría a funcionar sobre esos archivos. la verdad que me sorprendiste. Eternamente agradecido, me ahorraste horas y horas de renombrado.

¿Un minuto antes de la hora pactada? ¿Algo cómo:?

Capture - 05 agosto 2019 - 07-59-00 a. m. - 00000. Mp4

Ponme un ejemplo porque no consigo reproducir el problema.

Exacto. En esos archivos como El que pusiste de ejemplo. No les coloca el nombre. Sólo la fecha y el nro correspondiente al final 01, 02 etc es decir que a ese archivo lo deja con el siguiente nombre

05_08_19 01.mp4

Probé ajustando manualmente la hr a 08-00-00 y ahí si actúa el script y lo renombrar correctamente a

AMA 05_08_19 01.mp4

Imagino que será más bien

Capture - 05 agosto 2019 - 06-59-00 a. m. - 00000. Mp4

porque para

Capture - 05 agosto 2019 - 07-59-00 a. m. - 00000. Mp4

lo hace correctamente, al menos en mis pruebas. Si no pone ningún nombre es porque en la tabla de nombres no hay ninguno que corresponda a PROGRAMA_hh (con "a" o "p" según el caso). Y para este ejemplo existe PROGRAMA_07a=AMA. Se pueden añadir otros nombres a la tabla, por ejemplo PROGRAMA_06a=AMA pero esta solución tiene sus límites.

Bien, lo que hice fue tratar de evitar esas grabaciones con antelación y corregir el horario en que el script lograba comenzar la misma, y evitar así las grabaciones antes de tiempo. Con esto ya se corrige el problema, ya que lo que te remarcaba de los archivos que se grababan antes de hora eran archivos viejos que ya se corrigieron, en la actualidad ya no pasará tal cosa. Muchas gracias nuevamente por el tiempo invertido, de verdad que hiciste una tarea monumental y me diste una mano enorme! Te mando un abrazo gigante y nuevamente gracias. Me verás nuevamente pronto consultando alguna que otra cosa. Hasta entonces

Me alegro mucho. Será un placer intentar echarte una mano (o dártela como decís vosotros).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas