¿Cómo puedo cambiar el nombre de los archivos en masa?

126

Tengo un montón de archivos nombrados con un patrón 99 - DescriptiveName.txty me gustaría eliminar el número del frente, así que solo tengo DescriptiveName.txt.

¿Cómo puedo hacer esto? ¿Puedo hacerlo desde la línea de comando o hay una utilidad que pueda hacer esto?

CodeSlave
fuente

Respuestas:

94

Sé que en su título dice "in dos", pero tengo la impresión de que solo está buscando una manera de hacer esto y se pregunta si esa es la mejor manera.

La mejor herramienta absoluta que he encontrado para esto es la utilidad Bulk Rename .

Utilidad de cambio de nombre masivo

No es una herramienta de línea de comando, pero tienen una versión de línea de comando si realmente quieres usarla de esa manera.

He usado mucho la versión GUI, y es muy potente, muy rápida y extremadamente fácil de usar.

Ah, y es GRATIS para uso personal.

Jim McKeeth
fuente
Lamentablemente, la herramienta no es gratuita para uso comercial :(
AntonK
Por eso dije que era gratis para uso personal.
Jim McKeeth
2
Esta es una herramienta súper rápida. Resolvió mi problema de 6,000 archivos en segundos, usando varias lógicas de búsqueda y reemplazo. Es como usar Notepad ++ pero editar miles de archivos. Una gran solución, gracias!
Maní
59

Un pequeño script de PowerShell:

$args | Rename-Item -NewName { $_.Name.ToLower() -replace '\d+ - ' }

Combinado con expresiones regulares más complejas, esto podría convertirse en algo así como:

ls | Rename-Item -NewName {$_ -replace '(\d+) - (.*).mp3', '$2 - $1.mp3' }

Lo que convierte cosas como '01 - Beginning.mp3 'en' Beginning - 01.mp3 '.

Use el -WhatIfparámetro Rename-Itemactivado para verificar los cambios de nombre antes de emitirlos.

sysrqb
fuente
1
@sysrqb, investiga un poco más.
Joey
¿Reemplazar no requiere dos expresiones de cadena? El segundo tiene dos, el primero no. ... -replace '\d+ - ',''. Además, creo que el primero es mejor, simplemente quitando el comienzo usando regex. Aunque creo que deberías incluir el ancla ^ al comienzo de la expresión para que solo coincida con los nombres que comienzan con números.
Xalorous
1
@Xalorous: Bueno, simplemente podrías probarlo. -replacepuede tener solo un argumento en el lado derecho, en cuyo caso el segundo es implícitamente la cadena vacía.
Joey
Esto me salvó. La utilidad Bulk Rename acaba de fallar ahora y probé muchas otras soluciones. Esto es mucho mejor para las personas que se sienten cómodas con regexp. Muchas gracias !!
Inkh Su Tesou
24

Si realmente desea utilizar la línea de comandos de Windows (si no desea descargar algo), puede hacerlo así:

dir /B > fileList.txt
for /f "tokens=1,2,3" %i in (fileList.txt) DO ren "%i %j %l" %l

La primera línea genera la lista de archivos en un archivo llamado fileList.txt. La segunda línea separa cada uno de los nombres en la lista en 3 partes, el #, el "-" y el resto del nombre. Para cada uno de ellos, ejecuta el comando renombrar.

zdan
fuente
2
Elimine la primera línea para simplificarlo y haga:for /f "tokens=1,2,3" %i in ('dir /B') DO ren "%i %j %l" %l
Sé que esto es antiguo, pero sigue siendo una respuesta sólida: solo el% l (% L) debe ser% k (% K) [incremento de tokens de% i (% I), así que I, J, K ...]
Donald Byrd
24

AntRenamer hace que sea bastante fácil definir un patrón de cambio de nombre; ya hay muchos preparados (y ofrece una vista previa de las acciones):

AntRenamer

Gratis para uso personal y comercial.

Gnoupi
fuente
19

vieja escuela:

Puede hacer un DIR y redirigir la salida a un archivo, como en DIR * .TXT> TEMP.BAT

Luego use un editor para sacar lo que no necesita y modificar las partes que sí necesita. Agregue un "@echo off" como línea superior, guárdelo y ejecútelo.

WireGuy
fuente
Obtuve esta referencia de página de un doctorado de la vieja escuela en esto: dostips.com/DosCommandIndex.htm ; ¡Es increíble lo que puedes hacer con (¿bueno?) DOS viejo!
nik
16

Otra opción: Massive File Renamer

Permite cambiar fácilmente el nombre de múltiples archivos y extensiones de archivo . ¡Es muy rápido y simple!

Para usuarios avanzados y desarrolladores, es posible usar expresiones regulares .

Véalo en acción:

ingrese la descripción de la imagen aquí

IvanRF
fuente
1
Por cierto, ¿cómo podemos seleccionarlo para abrir todos los archivos dentro de las subcarpetas? Tengo una carpeta raíz con aproximadamente 50 subcarpetas (recursivamente) y varios archivos dentro de ellas.
Pacerier
1
@Pacerier Creo que el selector de archivos Java no permite eso. Tuve la idea de permitir seleccionar una carpeta y se puede incluir la búsqueda recursiva. ¡Lo notaré y lo agregaré en una versión futura!
IvanRF
13

Utilizo la herramienta de cambio de nombre múltiple de Total Commander (ctrl + M) para cosas como esta. Su útil herramienta, una de las demasiadas para contar, es fácil de usar y también puede emplear expresiones y plantillas regulares si es necesario. Ah, y obviamente te da una vista previa antes de hacer cualquier cambio.

Esta es la tercera o cuarta pregunta que he respondido al recomendar Total Commander ... Debería recibir una comisión de ellos ;-)

Yuval
fuente
11

La herramienta con la que me he quedado satisfecho es ReNamer . También admite el guardado de reglas de cambio de nombre, lo que me ha sido útil, ya que muchas veces hago los mismos cambios de nombre.

A continuación se muestra un ejemplo de cómo eliminar texto antes del primer guión, pero hay muchas otras reglas que puede definir.

ingrese la descripción de la imagen aquí

Esko Luontola
fuente
5

He usado Free Commander Portable (freeware) para esto con buenos resultados:

  1. Seleccione o navegue a los archivos o directorios para cambiar el nombre
  2. Presione [Ctrl-M] (o Archivo> Cambio de nombre múltiple)
  3. llene los campos como tenga sentido para su circunstancia
  4. verifique que la vista previa muestre lo que espera
  5. ¡Ir!
wilkie mate
fuente
4

Para usuarios avanzados y desarrolladores, sugeriría RegexRenamer .

Captura de pantalla de RegexRenamer

Pro:

  • IU muy simple;
  • Expresiones regulares con las que los desarrolladores están familiarizados;
  • GPLv2;

Contras:

  • ¡No es una línea de comando! :)
bytebuster
fuente
¡No se pudo hacer que funcione recursivamente para todas las subcarpetas de la carpeta seleccionada!
Luckylooke
3

Aquí hay una solución de línea de comandos: un programa Java que escribí específicamente para facilitar el trabajo con "patrones" en los nombres de archivo. Es gratis y de código abierto, así que siéntete libre de modificarlo:

RenameWand
http://renamewand.sourceforge.net/

Algunos ejemplos de uso relevantes:

Coloque todo antes del "-"en el nombre del archivo:

java -jar RenameWand.jar  "<a> - <b>"  "<b>"

Anteponga un número de 3 dígitos al nombre del archivo, ordenando por hora de última modificación:

java -jar RenameWand.jar  "<a>"  "<3|#FT> <a>"

Reorganizar partes del nombre de archivo y cambiar mayúsculas y minúsculas:

java -jar RenameWand.jar  "<album> - <artist> - <song>.<ext>" 
                          "<artist.upper> <album.title> - <song>.<ext.lower>"
Zach Scrivena
fuente
3

Descubrí RenPhoric hace aproximadamente un mes. Soberbio. Y es gratis .

No tenía una interfaz complicada y pude cambiar rápidamente el nombre exactamente como quería. Expresión regular capaz. No he usado nada más desde entonces.

Virola Umber
fuente
2

Me gusta el WildRename de Cylog . Es potente, pero fácil de usar, y tiene muchas características:

  1. rápido
  2. manipulación de cuerdas
  3. contadores
  4. comodines
  5. expresiones regulares
  6. sustitución
  7. conversión de caso
  8. Inicio sesión
  9. simulación (muestra los resultados sin aplicarlos realmente)

ingrese la descripción de la imagen aquí

Synetech
fuente
2

Como @zdan arriba, hice esto por línea de comando (usando "cmd.exe" en Windows). Tomó algunos ajustes para mi caso particular, pero un poco de investigación lo resolvió.

Al igual que zdan, envié la lista a un archivo TXT, luego la usé tokensy delimscambié el nombre de los archivos en consecuencia. En mi caso, comencé con una lista de archivos con el siguiente nombre:

name-01-02-2012.csv

Quería que la parte de la fecha del archivo estuviera en el orden a / m / d, con la parte del "nombre" al final para que se lea así:

2012-01-02-name.csv

Para hacer esto en masa, utilicé el siguiente código. Tenga en cuenta que al hacerlo de esta manera, se consideran TODAS las partes del nombre de archivo, incluida la extensión de ".csv". Eso me engañó la primera vez.

dir /B > fileList.txt
for /f "tokens=1,2,3,4,5 delims=-." %i in (fileList.txt) DO ren "%i-%j-%k-%l.%m" %l-%j-%k-%i.%m

El tokensson las "partes" del nombre de archivo, el delimsson los separadores. Tenga en cuenta que en mi caso, tenía 2 delimitadores (un guión y un punto).

Personalmente no me importa la aplicación "Bulk Rename". Como otros han mencionado, la GUI es atroz y no muy intuitiva. Con un poco de investigación y una codificación simple, estas cosas se pueden hacer mucho más eficiente y rápidamente.

gtr1971
fuente
2

Nombre divertido y herramienta de línea de comando muy potente, muy rápida y extremadamente fácil de usar. "Buscar y reemplazar texto" FART http://fart-it.sourceforge.net/ ¡ FUNCIONA GENIAL! también puede cambiar el nombre de las palabras en archivos txt.

USO

Usage: FART [options] [--] <wildcard>[,...] [find_string] [replace_string]

Options:
 -h --help          Show this help message (ignores other options)
 -q --quiet         Suppress output to stdio / stderr
 -V --verbose       Show more information
 -r --recursive     Process sub-folders recursively
 -c --count         Only show filenames, match counts and totals
 -i --ignore-case   Case insensitive text comparison
 -v --invert        Print lines NOT containing the find string
 -n --line-number   Print line number before each line (1-based)
 -w --word          Match whole word (uses C syntax, like grep)
 -f --filename      Find (and replace) filename instead of contents
 -B --binary        Also search (and replace) in binary files (CAUTION)
 -C --c-style       Allow C-style extended characters (\xFF\0\t\n\r\\ etc.)
    --cvs           Skip cvs dirs; execute "cvs edit" before changing files
 -a --adapt         Adapt the case of replace_string to found string
 -b --backup        Make a backup of each changed file
 -p --preview       Do not change the files but print the changes
slm
fuente
¿Algunos detalles más? ¿ Cambia el nombre de los archivos ?
vonbrand
Sí, -fopción, como se indica.
user1016274
2

El script de cambio de nombre múltiple es una alternativa de código abierto a la herramienta de cambio de nombre total de Total Commanders que puede manejar a través del script. Puede usar complementos TC para obtener información de metadatos.

https://code.google.com/p/multi-rename-script/ http://multi-rename-script.googlecode.com/svn/trunk/docs/res/MRS.PNG

majkinetor
fuente
2
@echo off
setlocal enabledelayedexpansion
conjunto X = 5
establecer FOLDER_PATH =.
pushd% FOLDER_PATH%
para %% f en (*) hacer si %% f neq% ~ nx0 (
    establezca "filename = %% ~ nf"
    establezca "filename =! filename: ~% X%!"
    ren "%% f" "! filename! %% ~ xf"
)
popd

guardar esto en un archivo por lotes y ejecutar

bbm123
fuente
Esto es bueno, pero ¿cómo puedo hacer que la X sea una variable (pasar como parámetro)?
Kangkan
@Kangkan así:set /p "X=Enter the value for X: "
Kidquick
1

Yo uso Blackboard para administrar cursos en una universidad. Cuando descargo una tarea en masa (en Blackboard, hago clic en la parte superior de la columna de calificación, luego "descargar archivo de tarea" Blackboard agrega un montón de cosas adicionales al nombre del archivo, a menudo haciendo que el nombre del archivo sea demasiado largo para ser válido en Windows.

Así es como se ven:

Recitation20Assignment_studentname_attempt_2013-03-01-20-03-09_Exercise28129.docx

Y esto es lo que quería

studentname.docx

Entonces utilicé el enfoque que aconsejaron @zdan y @ gtr1971, al abrir una ventana de comandos en la carpeta con los archivos dentro (CMD.EXE). Luego ejecute este comando para poner todos los nombres de archivo en un documento.

dir /b >filelist.txt

Edite el documento y elimine los nombres de carpetas, etc.

Use este comando para reemplazar las cosas de nombre de archivo agregadas de Blackboard con solo el nombre de usuario y la extensión de archivo.

for /f "tokens=1,2,3,4,5,6 delims=_." %i in (filelist.txt) do ren "%i _%j_%k_%l_%m.%n" %j.%n

Espero que esto ayude a alguien más también.

Webmentorman
fuente
1

He desarrollado una utilidad de línea de comandos híbrida JScript / batch llamada JREN.BAT que puede cambiar el nombre de archivos o carpetas realizando una búsqueda de expresiones regulares y reemplazando los nombres. Es un script puro que se ejecutará de forma nativa en cualquier máquina con Windows desde XP en adelante. La documentación completa está incrustada en el script.

Suponiendo que JREN.BAT está en su directorio actual, o mejor aún, en algún lugar dentro de su ruta, su tarea de cambio de nombre se vuelve trivial.

jren "^\d+[ -]+(.+)\.txt$" "$1" /i

o

jren "^\d+[ -]+(?=.+\.)" "" /fm "*.txt"

Hay muchas opciones, incluida la /Sopción que realiza recursivamente el cambio de nombre en los subdirectorios.

dbenham
fuente
0

Si necesita un poder serio y está dispuesto a desembolsar el dinero ... PowerGrep es una de las herramientas más potentes y versátiles del mercado ... puede cambiar el nombre de casi cualquier cosa con PowerGrep ... incluso la búsqueda y el reemplazo binarios ... Es creado por RegEx Guru, Jan Goyvaerts .

ingrese la descripción de la imagen aquí

Eddie B
fuente
Esta utilidad es increíblemente cara ...
Wizard79
Puedes usarlo gratis indefinidamente ... sin embargo, vale la pena ... Lo uso todo el tiempo.
Eddie B