Renombrador masivo de archivos
Añade prefijos, sufijos, números de secuencia, busca y reemplaza, cambia mayúsculas o modifica extensiones, todo en tu navegador
Arrastra archivos aquí, o haz clic en el botón de abajo
Cualquier tipo y cantidad de archivos, procesados solo en tu navegador, nunca se suben
¿Qué es el renombrado masivo de archivos?
El renombrado masivo de archivos consiste en cambiar los nombres de un grupo de archivos de una sola pasada según un conjunto de reglas. Casos típicos: convertir descargas de cámara como IMG_1234.JPG en 2026-06-viaje-001.jpg, anteponer @2x_ a los assets exportados de UI o numerar recibos escaneados según la fecha de la factura. El renombrador integrado del Finder de macOS cubre Buscar y Reemplazar y un formato de "nombre + contador", pero no puede reescribir extensiones; el renombrado por Tab del Explorador de Windows solo admite números de secuencia simples (PowerToys PowerRename añade regex pero requiere instalación aparte). Cualquier escenario más complejo suele acabar en aplicaciones de escritorio como ReNamer o Bulk Rename Utility, o en scripts hechos a mano en PowerShell o shell. Esta herramienta convierte cada operación (prefijo/sufijo, numeración, buscar y reemplazar, mayúsculas, extensión) en un control visual con vista previa en vivo y detección de duplicados, para que verifiques el resultado antes de descargar. Todo el flujo se ejecuta en la memoria del navegador, así que los nombres de archivo con códigos de proyecto, nombres de clientes o información personal nunca salen de tu equipo.
Cómo usar
Pasos
- Arrastra los archivos al área de carga o haz clic en "Seleccionar archivos" para elegirlos; añadir más veces los agrega a la lista
- Reordena con "Ordenar por nombre / tamaño", o usa las flechas arriba/abajo de cada fila para ajustes finos
- Configura las reglas en las tres tarjetas: prefijo/sufijo, buscar y reemplazar, numeración, mayúsculas, extensión
- La columna "Nombre nuevo" se actualiza en vivo: el azul indica que difiere del original, el rojo que coincide con el de otro archivo
- Haz clic en "Descargar este archivo" para guardar archivos individuales, o en "Descargar como ZIP" para llevártelo todo a la vez
Orden de las reglas
- Primero se reemplaza el nombre base (déjalo vacío para mantener el original): útil cuando quieres que todos los archivos terminen como, por ejemplo, "foto" más un número de secuencia, sin importar su nombre original
- Luego buscar/reemplazar actúa solo sobre el nombre base, nunca sobre la extensión
- A continuación se inserta la numeración como prefijo, sufijo o reemplazo total del nombre base
- Prefijo y sufijo envuelven el resultado
- La transformación de mayúsculas y el tratamiento de la extensión van al final; la extensión se procesa de forma independiente
Casos de uso
Cómo funciona
Toda la herramienta se ejecuta sobre File API, Blob y URL.createObjectURL del navegador: cada byte permanece en memoria. Cuando arrastras o seleccionas archivos, el navegador entrega a JavaScript objetos File (subclases de Blob) en el heap del JS; la herramienta solo lee la propiedad `name` de cada archivo para renombrar, sin tocar nunca el contenido binario. Las reglas se aplican en un orden fijo para evitar interferencias: primero se determina el nombre base (el indicado por el usuario o el original), separando la extensión por lastIndexOf('.') (los dotfiles como .gitignore se tratan únicamente como nombre base, sin extensión); después se ejecuta buscar/reemplazar como String.prototype.split + Array.prototype.join (sin regex, evitando coincidencias accidentales con caracteres especiales); a continuación se calcula el número de secuencia mediante `String(start + i).padStart(pad, '0')` y se coloca como prefijo, sufijo o reemplazo del nombre base; el prefijo y el sufijo envuelven el resultado; la transformación de mayúsculas se aplica de una vez a toda la cadena prefijo+base+sufijo; la extensión se procesa de forma independiente (mantener/mayúsculas/minúsculas/reemplazar). La detección de duplicados cuenta cada nombre nuevo en un Map<string, number> durante la vista previa; los nombres que aparecen más de una vez entran en un duplicateSet que la interfaz resalta en rojo. Pulsar "Descargar como ZIP" mientras el conjunto no está vacío muestra una notificación de error y aborta el empaquetado — la lista original se conserva para que ajustes las reglas y vuelvas a intentarlo. Esto se ejecuta dentro de useMemo([files, opts]), de modo que las ediciones de reglas se recalculan de forma incremental sin volver a renderizar la lista de archivos. La descarga de un único archivo envuelve el File con URL.createObjectURL, dispara el clic de un `<a download>` sintético y revoca la URL inmediatamente. El empaquetado en ZIP importa JSZip dinámicamente al primer clic (~80 KB, sin coste para el primer pintado), lee el arrayBuffer() de cada archivo, lo escribe bajo el nombre nuevo y llama a generateAsync({type:'blob', compression:'DEFLATE', compressionOptions:{level:6}}). DEFLATE es el método predeterminado de ZIP; el nivel 6 equilibra ratio y velocidad. El cómputo de reglas es O(n) respecto al número de archivos; el tiempo de empaquetado escala con el total de bytes. Los navegadores suelen leer el contenido de los File de forma perezosa (arrayBuffer() es cuando los bytes salen realmente del disco), por lo que incluso miles de archivos en cola apenas cuestan nada durante la vista previa, y el pico de memoria solo ocurre al pulsar "Descargar como ZIP".
- lastIndexOf('.') separa la extensión; si el único punto está en el índice 0 (por ejemplo .gitignore), el archivo no tiene extensión y el punto inicial se queda en el nombre base
- Buscar y reemplazar usa String.prototype.split + Array.prototype.join en lugar de replaceAll, evitando que se interpreten accidentalmente $1/$& en la cadena de reemplazo
- padStart(pad, '0') genera el número rellenado con ceros; pad=0 emite el número tal cual para casos en los que la alineación no importa
- La transformación de mayúsculas se ejecuta después de unir prefijo y sufijo, de modo que normaliza de una vez todo el segmento base; la extensión se gestiona de forma independiente
- La detección de duplicados se ejecuta dentro de useMemo con un Map; recálculo O(n), y la interfaz solo cambia un className en las filas resaltadas, sin reconstruir el DOM
- Las URLs de Blob se revocan inmediatamente con URL.revokeObjectURL para liberar el pool de asignación de URLs, ya que las URLs de objetos reservadas se acumulan rápido bajo uso intensivo
- JSZip se carga mediante import dinámico solo cuando se inicia el empaquetado, por lo que esos ~80 KB de código no afectan al primer pintado ni al LCP
- El nivel 6 de DEFLATE es el punto óptimo en el lado del navegador; el nivel 9 añade un 1-2 % más de compresión a costa de 2-3 veces el tiempo y apenas ayuda con imágenes/vídeo ya comprimidos
Ejemplos
Prefijo + numeración rellenada a 3 dígitos
Entrada: photo.jpg, sunset.jpg, beach.jpg
Reglas: prefijo=trip2026_, inicio=1, relleno=3, posición=después
Salida:
trip2026_photo001.jpg
trip2026_sunset002.jpg
trip2026_beach003.jpgReemplazar el nombre base por completo
Entrada: GH010001.MP4, GH010002.MP4, GH010003.MP4
Reglas: base=SceneA_take, inicio=1, relleno=2, posición=después, ext=minúsculas
Salida:
SceneA_take01.mp4
SceneA_take02.mp4
SceneA_take03.mp4Eliminar un sufijo redundante con buscar/reemplazar
Entrada: report_v1_FINAL.docx, summary_v1_FINAL.docx
Reglas: buscar=_v1_FINAL, reemplazar=(vacío), mayúsculas=minúsculas
Salida:
report.docx
summary.docxReemplazar la extensión
Entrada: index.htm, about.htm, contact.htm
Reglas: extensión=reemplazar, nueva ext=html
Salida:
index.html
about.html
contact.htmlPrefijo + espacios a guiones + minúsculas
Entrada: Banner Image.PNG, Hero Photo.JPG
Reglas: prefijo=web-, buscar=(espacio), reemplazar=-, mayúsculas=minúsculas, extensión=minúsculas
Salida:
web-banner-image.png
web-hero-photo.jpgPreguntas frecuentes
¿Se suben mis archivos a un servidor?
No. Desde añadir archivos hasta producir los nombres nuevos y empaquetar el ZIP, todo se ejecuta localmente en tu navegador. No se realiza ninguna petición de subida. Puedes verificarlo en el panel Network de las DevTools de tu navegador.
¿Por qué mis .gitignore o .bashrc no se tratan como si tuvieran extensión?
La herramienta divide por el último punto, pero si el único punto está justo al principio (un dotfile), el nombre completo se considera nombre base. Esto evita confundir un marcador de archivo oculto con una extensión.
¿Qué ocurre si los nombres nuevos coinciden entre sí?
La lista de vista previa resalta los duplicados en rojo y muestra una insignia con el recuento. Pulsar "Descargar como ZIP" mientras haya duplicados se bloquea con un mensaje de error — tu lista de archivos no se pierde, basta con ajustar las reglas y volver a intentarlo. Soluciones habituales: activar la numeración, aumentar el ancho de relleno o añadir un prefijo/sufijo.
¿Puede renombrar carpetas o conservar la jerarquía?
Aún no. La versión actual gestiona una única lista plana de archivos. Para un renombrado masivo con conciencia de directorios, renombra los archivos aquí y luego reconstruye el árbol de carpetas con la herramienta Empaquetar ZIP.
¿Buscar y reemplazar admite expresiones regulares?
No. Usa coincidencia literal de cadenas (split-join) a propósito, para que los usuarios no disparen accidentalmente tokens especiales de la cadena de reemplazo como $1 o $& en su campo de reemplazo. La coincidencia simple cubre la inmensa mayoría de necesidades de limpieza.
¿Cuántos archivos puede manejar?
No hay un tope estricto en la cantidad: la vista previa es prácticamente gratis. El empaquetado está limitado por la memoria del navegador: totales muy grandes (varios GB) pueden no llegar a asignar un único Blob, en cuyo caso divide los archivos en lotes y empaqueta cada uno por separado.
El ZIP descargado muestra nombres no ASCII corruptos. ¿Por qué?
JSZip escribe los nombres en UTF-8 por defecto, y los descompresores modernos (Archive Utility de macOS, Explorador de Windows 11, 7-Zip, WinRAR 5+) los leen correctamente. El antiguo Explorador de Windows en Win 7/8 puede seguir decodificando mal nombres no latinos: usa 7-Zip o Bandizip en su lugar.
¿Puedo deshacer un renombrado si me he equivocado?
Los renombrados solo se materializan en el momento de la descarga: hasta que pulsas "Descargar como ZIP" o "Descargar este archivo", los archivos originales en el disco siguen intactos. La vista previa es totalmente reversible: borra las reglas, edítalas o elimina archivos individuales de la lista. Si ya has descargado, basta con ajustar las reglas y volver a descargar con los mismos archivos de origen.