
Me preguntaba si existe una forma rápida y sencilla de buscar nombres de archivos con varios caracteres y eliminar todos los caracteres posteriores.
Por ejemplo si tengo un archivo llamado:
Great Movie Title 2021 1080p asldkfjalfj.mkv
Another Great Movie 1997 480p aldfasdfa.avi
Boring movie but its ok 2015 720p asadfqwr.mp4
Quiero encontrar 1080p
,, en el nombre del archivo y luego eliminar todo lo que sigue 720p
.480p
Sé que puedes usar For
el bucle de Windows Batch, pero solo puedes usar un carácter para encontrarlo. Incluso si es una aplicación de terceros que puede hacer esto, parece que no puedo encontrarla.
Respuesta1
¿Está buscando en todo el disco o solo en un directorio?
De cualquier manera, PowerShell puede manejar esto.
Esto hará toda la unidad C, cambiando el nombre de cualquier cosa que tenga 1080p en el nombre del archivo:
cd c:\
Get-ChildItem -recurse -include *1080p* | foreach-object { $name = $_.fullname; $newname = $name -replace '1080p.*\.','1080p.'; rename-item $name $newname }
Luego podrías repetirlo para 480p y 720p.
Respuesta2
Potencia Shelles el camino a seguir.
Aquí hay otro enfoque que podría reunirlos todos de una sola vez y modificarlos fácilmente.
Esto se ejecutaría desde la carpeta de nivel superior. Al hacerlo, se libera el -Path
parámetro (aquí posicional) para filtrar por múltiples tipos de archivos, porque -Path
, a diferencia de -Filter
, puede tomar una matriz de valores.
Get-ChildItem *.mkv, *.avi, *.mp4 -Recurse | ForEach {
If ( $_.BaseName -match '^.+(1080p|720p|480p)' ) {
Rename-Item -LiteralPath $_.FullName -NewName ( $matches[0] + $_.Extension )
}
}
La expresión regular '^.+(1080p|720p|480p)'
coincide con todos los caracteres desde el principio del nombre del archivo hasta cualquiera de las |
cadenas de resolución "o'd" ( ), inclusive. Ese texto se almacena en el $matches
valor automático y se utiliza para construir el nuevo nombre.