ToolActToolAct

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

Añadir archivos

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

  1. 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
  2. Reordena con "Ordenar por nombre / tamaño", o usa las flechas arriba/abajo de cada fila para ajustes finos
  3. Configura las reglas en las tres tarjetas: prefijo/sufijo, buscar y reemplazar, numeración, mayúsculas, extensión
  4. La columna "Nombre nuevo" se actualiza en vivo: el azul indica que difiere del original, el rojo que coincide con el de otro archivo
  5. 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

Organizar descargas de fotos de cámara o móvilLos nombres por defecto de cámara como DSC_0001.JPG o IMG_1234.JPG no aportan ningún significado. Añadir un prefijo de fecha o tema y un número de secuencia hace que los álbumes sean legibles de un vistazo. Activar "Extensión en minúsculas" evita mezclas de JPG/jpg que rompen los sistemas de archivos sensibles a mayúsculas (Linux) cuando se sincronizan desde otros que no lo son (Windows/macOS).
Nomenclatura de assets para iOSLas exportaciones de diseño como "icon-home @2x.png" e "icon-home @3x.png" pueden convertirse en lote a "icon-home@2x.png" e "icon-home@3x.png", siguiendo las convenciones del Asset Catalog de Xcode. Usa buscar y reemplazar para eliminar los espacios y luego pasa el nombre base a minúsculas, evitando fallos de carga por sensibilidad a mayúsculas en producción.
Normalizar nombres de drawables de AndroidAndroid exige que los nombres de recursos sean todo en minúsculas, en snake_case y sin dígito inicial. Las exportaciones con mayúsculas y minúsculas mezcladas como IcHomeActive.png o ic-home-active.png pueden convertirse en lote a ic_home_active.png en una sola pasada: reemplaza `-` por `_`, pasa el nombre base a minúsculas y la extensión también a minúsculas. Detecta el error de lint antes que la propia compilación.
Archivar recibos o contratos por mesArchivos escaneados como scan001.pdf–scan100.pdf no tienen contexto de archivo. Define el nombre base "2026-06-recibos-" con numeración rellenada a 3 dígitos y obtendrás "2026-06-recibos-001.pdf". Ordenar por nombre equivale ahora a ordenar por fecha, y un único ZIP envuelve todo el mes.
Estandarizar clips multimedia para ediciónLos editores suelen necesitar renombrar metraje multicámara por escena, por ejemplo GH010001.MP4 de GoPro → SceneA_take01.mp4. Usa el campo de nombre base para borrar el original, activa la numeración y pasa la extensión a minúsculas: todo el lote queda alineado alfabéticamente en tu NLE para facilitar la sincronización multicámara.
Eliminar tokens sensibles o redundantes de los nombresLos archivos exportados suelen llevar sufijos como (1), (copia) o _final_v2_FINAL. Buscar y reemplazar los limpia de una pasada. Los archivos con códigos de cliente o proyecto pueden convertirse a códigos anónimos antes de compartirlos externamente. Todo ocurre en la memoria del navegador: los originales nunca salen del dispositivo.
Normalizar assets estáticos para la webAntes de subir a una CDN o a un almacén de objetos, normaliza espacios, caracteres no ASCII y mayúsculas para evitar problemas con la codificación de URL. Cambia espacios por guiones, pasa el nombre base a minúsculas y la extensión también a minúsculas: una sola pasada produce nombres de assets amigables para SEO y seguros entre sistemas.

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.jpg

Reemplazar 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.mp4

Eliminar 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.docx

Reemplazar la extensión

Entrada: index.htm, about.htm, contact.htm
Reglas: extensión=reemplazar, nueva ext=html
Salida:
index.html
about.html
contact.html

Prefijo + 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.jpg

Preguntas 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.