Comando por lotes para cambiar el nombre de archivos como 'The Kids Performances (2020).mp4' a 'Kids Performances, The (2020).mp4'

Comando por lotes para cambiar el nombre de archivos como 'The Kids Performances (2020).mp4' a 'Kids Performances, The (2020).mp4'

Mi familia tiene grabaciones de las actuaciones de los niños en la escuela y actividades extraescolares guardadas a lo largo de los años como principalmente .aviarchivos .mp4. Me pidieron que tomara todos estos archivos (hay más de cien) y volviera a etiquetar cualquier video que comenzara con la palabra Theo Ay lo moviera hasta el final.

Por ejemplo, un vídeo titulado The Kids Performances (2020).mp4se cambiaría a Kids Performances, The (2020).mp4. No tengo idea de por qué quieren mantener las palabras They la 'A' en los títulos, pero lo hacen.

Estoy usando Windows y encontré un método relativamente simple en un tablero de este sitio que puedo usar para deshacerme del Thetítulo al principio, pero no puedo encontrar una manera de moverlo al final del título antes. el año registrado, que siempre aparece como (año).

Esto es de lo que estoy hablando:

for %%i in ("*.mp4") do (set fname=%%i) & call :rename
goto :eof
:rename
::Cuts off 1st four chars, then appends prefix
ren "%fname%" "%fname:~4%"
goto :eof

Esto se encarga de eliminar los primeros 4 caracteres de los títulos en formato por lotes, pero tengo problemas para mover esos primeros 4 caracteres al final del título antes del año. Les he suplicado a los miembros de mi familia que dejen estas palabras fuera del título por completo, pero no puedo convencerlos.

También tengo Python instalado en la PC si eso pudiera proporcionar un método más fácil para lograr este objetivo. ¡Gracias de antemano a cualquiera que pueda ayudar!

Respuesta1

Potencia Shellcon lista de artículos y lista de extensiones fácilmente ampliables (podemos usar-whatIfpara probarlo y luego eliminarlo para ejecutar nuestros cambios).

$ArticleList = @( 'A' , 'The' )
$ExtList     = @( '*.avi' , '*.mp4' )
# From folder with files
# Remove "-WhatIf" to execute after testing
gci $ExtList | 
   ? { $_.BaseName -match ( '^({0})\s(\.+)\s(\(\d+\))' -f ( $ArticleList -join '|' )) } | 
       ReName-Item -NewName { '{0}, {1} {3}{4}' -f $matches[2] , $matches[1] , $matches[3] , $_.Extension -WhatIf }

'^({0})\s(\.+)\s(\(\d+\))' -f ( $ArticleList -join '|' )

crea una expresión regular

'^(Article[0]|Article[1]{|...})\s(\.+)\s(\(\d+\))'

con tres grupos coincidentes:

  • Article : ({0})
  • TitleTExt: \s(\.+)
  • (Year) : (\(\d+\))

utilizado para construir el nuevo nombre.

Respuesta2

No es una solución automatizada como la publicada por Keith Miller, pero como alguien que escribió suficientes scripts cmd para saber que no quiero escribir otro, usaría Excel para esto:

  1. Abra el mensaje cmd y navegue hasta la carpeta con los archivos a cambiar de nombre.
  2. Copie la lista de nombres de archivos al portapapeles usando dir /b | clip(o dir /b /s | clipsi los archivos están guardados en subdirectorios) y péguelo en Excel.
  3. Guarde los nuevos nombres de archivos en otra columna usando las fórmulas que necesite. Si no puede hacerlo de forma totalmente automática, siempre puede modificar los resultados manualmente cuando sea necesario.
  4. Una vez que esté satisfecho con los nuevos nombres de archivos, cree una fórmula de Excel para cambiar el nombre de los archivos uno por uno. En esta etapa, la hoja podría verse similar a:
A B C D mi F GRAMO
1 Fórmulas:
2 Nombre de archivo original Prefijo Año Extensión Resto del nombre del archivo Nuevo nombre de archivo Dominio
3 Una actuación infantil (2018).avi =SI(O(SUPERIOR(IZQUIERDA(A3;2))="A ";SUPERIOR(IZQUIERDA(A3;4))="EL ");IZQUIERDA(A3;BUSCAR(" ";A3)-1);" ") =MEDIO(A3;BUSCAR("(";A3)+1;4) =DERECHA(A3;3) =MEDIO(A3;SI(B3="";1;LARGO(B3)+2);LARGO(A3)-LARGO(B3)-LARGO(C3)-LARGO(D3)-SI(B3="";4 ;5)) =E3&IF(B3="";"";", "&B3)&" ("&C3&")."&D3 ="ren """&A3&""" """&F3&""""
4 Actuación de algunos niños (2019) .mkv =SI(O(SUPERIOR(IZQUIERDA(A4;2))="A ";SUPERIOR(IZQUIERDA(A4;4))="EL ");IZQUIERDA(A4;BUSCAR(" ";A4)-1);" ") =MEDIO(A4;BUSCAR("(";A4)+1;4) =DERECHA(A4;3) =MEDIO(A4;SI(B4="";1;LARGO(B4)+2);LARGO(A4)-LARGO(B4)-LARGO(C4)-LARGO(D4)-SI(B4="";4 ;5)) =E4&IF(B4="";"";", "&B4)&" ("&C4&")."&D4 ="ren """&A4&""" """&F4&""""
5 Las actuaciones de los niños (2020).mp4 =SI(O(SUPERIOR(IZQUIERDA(A5;2))="A ";SUPERIOR(IZQUIERDA(A5;4))="EL ");IZQUIERDA(A5;BUSCAR(" ";A5)-1);" ") =MEDIO(A5;BUSCAR("(";A5)+1;4) =DERECHA(A5;3) =MEDIO(A5;SI(B5="";1;LARGO(B5)+2);LARGO(A5)-LARGO(B5)-LARGO(C5)-LARGO(D5)-SI(B5="";4 ;5)) =E5&IF(B5="";"";", "&B5)&" ("&C5&")."&D5 ="ren """&A5&""" """&F5&""""
1 Valores:
2 Nombre de archivo original Prefijo Año Extensión Resto del nombre del archivo Nuevo nombre de archivo Dominio
3 Una actuación infantil (2018).avi A 2018 avi Actuación infantil Actuación infantil, A (2018).avi ren "Actuación para niños (2018).avi" "Actuación para niños, A (2018).avi"
4 Actuación de algunos niños (2019) .mkv 2019 mkv Actuación de algunos niños Actuación de algunos niños (2019) .mkv ren "Actuación de algunos niños (2019).mkv" "Actuación de algunos niños (2019).mkv"
5 Las actuaciones de los niños (2020).mp4 El 2020 mp4 Actuaciones infantiles Actuaciones infantiles, The (2020).mp4 ren "Las actuaciones infantiles (2020).mp4" "Las actuaciones infantiles, Las (2020).mp4"
  1. Seleccione las celdas con los comandos calculados (en el ejemplo anterior G3:G5) y cópielas para colocarlas en el portapapeles y haga clic derecho en la ventana del símbolo del sistema (es posible que deba presionar Intro en la última línea) o pegue el portapapeles. contenido en un archivo *.cmd o *.bat vacío, guárdelo en la carpeta con los archivos cuyo nombre desea cambiar y ejecútelo.

información relacionada