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 .avi
archivos .mp4
. Me pidieron que tomara todos estos archivos (hay más de cien) y volviera a etiquetar cualquier video que comenzara con la palabra The
o A
y lo moviera hasta el final.
Por ejemplo, un vídeo titulado The Kids Performances (2020).mp4
se cambiaría a Kids Performances, The (2020).mp4
. No tengo idea de por qué quieren mantener las palabras The
y 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 The
tí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-whatIf
para 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:
- Abra el mensaje cmd y navegue hasta la carpeta con los archivos a cambiar de nombre.
- Copie la lista de nombres de archivos al portapapeles usando
dir /b | clip
(odir /b /s | clip
si los archivos están guardados en subdirectorios) y péguelo en Excel. - 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.
- 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" |
- 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.