ToolActToolAct

Renomeação de Arquivos em Lote

Adicione prefixos, sufixos, numeração sequencial, busca e substituição, mude o caso, modifique extensões — tudo no seu navegador

Adicionar arquivos

Arraste arquivos aqui ou clique no botão abaixo

Qualquer tipo e quantidade de arquivos, processados apenas no seu navegador — nunca enviados

O que é renomeação de arquivos em lote?

Renomeação em lote é a operação de alterar de uma só vez os nomes de um conjunto de arquivos seguindo um conjunto de regras. Cenários comuns: transformar despejos de câmera como IMG_1234.JPG em 2026-06-viagem-001.jpg, prefixar assets de exportação de UI com @2x_, sequenciar recibos digitalizados pela data da nota. A renomeação embutida do Finder do macOS cobre «Localizar e substituir» e o formato «nome + contador», mas não consegue reescrever extensões; a renomeação por Tab no Explorador do Windows só suporta numeração sequencial simples (o PowerRename do PowerToys adiciona regex, mas exige instalação separada). Trabalhos mais complexos costumam exigir aplicativos como ReNamer ou Bulk Rename Utility, ou scripts feitos à mão em PowerShell / shell. Esta ferramenta expõe cada operação — prefixo/sufixo, numeração, busca e substituição, caso, extensão — como um controle visual com pré-visualização ao vivo e detecção de duplicatas. Tudo roda na memória do navegador; nomes de arquivo com códigos de projeto, nomes de cliente e informações pessoais permanecem na máquina do usuário.

Como usar

Passos

  1. Arraste arquivos para a área de upload, ou clique em "Selecionar arquivos" para escolhê-los — adicionar mais vezes anexa à lista
  2. Reordene com "Ordenar por nome / tamanho", ou use as setas para cima/para baixo em cada linha para ajustes finos
  3. Configure as regras nos três cartões: prefixo/sufixo, busca e substituição, numeração, caso, extensão
  4. A coluna "Novo nome" atualiza ao vivo — azul indica que difere do original, vermelho indica colisão com outro arquivo
  5. Clique em "Baixar este arquivo" para salvar individualmente, ou em "Baixar como ZIP" para pegar tudo de uma vez

Ordem das regras

  • Substitua o nome base primeiro (deixe vazio para manter o original) — útil quando você quer que cada arquivo termine, por exemplo, como "photo" mais um número sequencial, independentemente do nome original
  • Em seguida, busca/substituição roda apenas sobre o nome base, nunca sobre a extensão
  • A numeração entra depois, como prefixo, sufixo ou substituição completa do nome base
  • Prefixo e sufixo envolvem o resultado
  • Transformação de caso e tratamento da extensão vêm por último; a extensão é processada de forma independente

Casos de uso

Organizar despejos de fotos da câmera/celularPadrões da câmera como DSC_0001.JPG ou IMG_1234.JPG não carregam significado. Adicionar um prefixo de data ou tema e numeração sequencial torna os álbuns legíveis num relance. Habilitar "Extensão em minúsculas" evita misturas de JPG/jpg que quebram sistemas de arquivos com diferenciação de caixa (Linux) quando sincronizados a partir de sistemas que ignoram caixa (Windows/macOS).
Nomenclatura de assets para iOSExportações de designers como "icon-home @2x.png" podem ser convertidas em lote para "icon-home@2x.png", combinando com as convenções do Asset Catalog do Xcode. Use busca e substituição para remover os espaços e depois passe o nome base para minúsculas, evitando falhas de carregamento por sensibilidade a maiúsculas em produção.
Normalizar nomes de drawable do AndroidO Android exige que os nomes de recursos sejam todos em minúsculas, em snake_case, sem dígito inicial. Exportações em caixa mista como IcHomeActive.png ou ic-home-active.png podem ser convertidas em uma única passagem para ic_home_active.png: substitua `-` por `_`, passe o nome base para minúsculas e a extensão para minúsculas.
Arquivar recibos/contratos por mêsArquivos digitalizados como scan001.pdf–scan100.pdf não têm contexto arquivístico. Defina o nome base "2026-06-recibos-" com numeração de 3 dígitos preenchida com zeros, obtendo "2026-06-recibos-001.pdf". Ordenar por nome agora equivale a ordenar por data, e um único ZIP empacota o mês inteiro.
Padronizar clipes de mídia para ediçãoEditores frequentemente precisam renomear material de várias câmeras por cena, por exemplo, GH010001.MP4 da GoPro → SceneA_take01.mp4. Use o campo de nome base para limpar o original, ative a numeração, deixe a extensão em minúsculas — o lote inteiro alinha-se em ordem alfabética no NLE para facilitar a sincronização multicam.
Remover tokens sensíveis ou redundantes dos nomesArquivos exportados costumam carregar sufixos como (1), (cópia) ou _final_v2_FINAL. Busca e substituição limpa tudo de uma vez. Arquivos contendo códigos de cliente/projeto podem ser convertidos em lote para códigos anônimos antes de compartilhamento externo. Tudo acontece na memória do navegador — os originais nunca saem do dispositivo.
Normalizar assets estáticos para a webAntes de enviar para um CDN ou armazenamento de objetos, normalize espaços, caracteres não-ASCII e letras maiúsculas para evitar armadilhas de URL-encoding. Substitua espaços por hifens, deixe o nome base em minúsculas, deixe a extensão em minúsculas — uma única passada gera nomes amigáveis para SEO e seguros entre sistemas.

Como funciona

A ferramenta inteira roda sobre as APIs File, Blob e URL.createObjectURL do navegador — cada byte permanece na memória. Quando você arrasta ou seleciona arquivos, o navegador entrega ao JavaScript objetos File (subclasses de Blob) na heap; a ferramenta apenas lê a propriedade `name` de cada arquivo para renomear, sem nunca tocar no conteúdo binário. As regras se aplicam em uma ordem fixa para evitar interferências: primeiro o nome base é determinado (fornecido pelo usuário ou o original), com a extensão dividida em lastIndexOf('.') (arquivos-ponto como .gitignore são tratados apenas como base, sem extensão); depois a busca/substituição roda como String.prototype.split + Array.prototype.join (sem regex — evita correspondência acidental de caracteres especiais); em seguida o número de sequência é calculado via `String(start + i).padStart(pad, '0')` e colocado como prefixo/sufixo/substituição do nome base; prefixo e sufixo envolvem o resultado; a transformação de caso é aplicada à string completa prefixo+base+sufixo de uma só vez, depois que prefixo e sufixo são unidos; a extensão é processada de forma independente (manter/maiúsculas/minúsculas/substituir). A detecção de duplicatas conta cada novo nome em um Map<string, number> durante a pré-visualização; nomes que aparecem mais de uma vez entram em um duplicateSet que a UI destaca em vermelho. Clicar em "Baixar como ZIP" enquanto o conjunto não estiver vazio exibe um toast de erro e aborta o empacotamento — a lista original de arquivos é preservada, então você pode ajustar as regras e tentar novamente. Isso roda dentro de useMemo([files, opts]), de forma que edições nas regras recomputam incrementalmente sem renderizar a lista de arquivos novamente. O download de arquivo único embrulha o File em URL.createObjectURL, dispara um clique sintético em `<a download>` e revoga a URL imediatamente. O empacotamento ZIP importa dinamicamente o JSZip no primeiro clique (~80 KB, sem custo no first-paint), lê o arrayBuffer() de cada arquivo, escreve-o sob o novo nome e chama generateAsync({type:'blob', compression:'DEFLATE', compressionOptions:{level:6}}). DEFLATE é o padrão do ZIP; o nível 6 equilibra taxa e velocidade. O cálculo das regras é O(n) em quantidade de arquivos; o tempo de empacotamento escala com o total de bytes. Navegadores normalmente leem o conteúdo de um File de forma preguiçosa — arrayBuffer() é o momento em que os bytes realmente saem do disco — então mesmo milhares de arquivos enfileirados custam quase nada durante a pré-visualização, com o pico de memória ocorrendo apenas ao "Baixar como ZIP".

  • lastIndexOf('.') divide a extensão; se o único ponto está no índice 0 (ex.: .gitignore), o arquivo não tem extensão e o ponto inicial permanece no nome base
  • Busca e substituição usa String.prototype.split + Array.prototype.join em vez de replaceAll, evitando interpretação acidental de $1/$& na string de substituição
  • padStart(pad, '0') gera o número preenchido com zeros; pad=0 produz o número bruto para casos em que alinhamento não é necessário
  • A transformação de caso roda depois que prefixo e sufixo são unidos, normalizando todo o segmento base de uma só vez; a extensão é tratada de forma independente
  • A detecção de duplicatas roda dentro de useMemo com um Map; recomputação O(n), e a UI apenas troca uma className das linhas destacadas — sem reconstrução do DOM
  • URLs Blob são revogadas imediatamente via URL.revokeObjectURL para liberar o pool de alocação de URLs, já que object URLs reservadas se acumulam rapidamente sob uso intenso
  • JSZip é carregado via dynamic import apenas quando o empacotamento é acionado, então os ~80 KB de código nunca afetam o first-paint nem o LCP
  • DEFLATE nível 6 é o ponto ideal no navegador; o nível 9 adiciona 1–2% de compressão por 2–3× o tempo e quase não ajuda em imagens/vídeo já comprimidos

Exemplos

Prefixo + numeração de 3 dígitos com zeros à esquerda

Entrada: photo.jpg, sunset.jpg, beach.jpg
Regras: prefix=trip2026_, start=1, pad=3, position=after
Saída:
trip2026_photo001.jpg
trip2026_sunset002.jpg
trip2026_beach003.jpg

Substituir o nome base por completo

Entrada: GH010001.MP4, GH010002.MP4, GH010003.MP4
Regras: base=SceneA_take, start=1, pad=2, position=after, ext=lowercase
Saída:
SceneA_take01.mp4
SceneA_take02.mp4
SceneA_take03.mp4

Remover sufixo redundante via busca/substituição

Entrada: report_v1_FINAL.docx, summary_v1_FINAL.docx
Regras: find=_v1_FINAL, replace=(vazio), case=lowercase
Saída:
report.docx
summary.docx

Substituir extensão

Entrada: index.htm, about.htm, contact.htm
Regras: extension=replace, new ext=html
Saída:
index.html
about.html
contact.html

Prefixo + espaço-para-hífen + minúsculas

Entrada: Banner Image.PNG, Hero Photo.JPG
Regras: prefix=web-, find=(espaço), replace=-, case=lowercase, extension=lowercase
Saída:
web-banner-image.png
web-hero-photo.jpg

Perguntas frequentes

Meus arquivos são enviados para um servidor?

Não. Da adição dos arquivos à produção dos novos nomes e ao empacotamento do ZIP, tudo roda localmente no seu navegador. Nenhuma requisição de upload é feita. Você pode confirmar no painel Network do DevTools.

Por que meu .gitignore / .bashrc não é tratado como tendo extensão?

A ferramenta divide pelo último ponto, mas se o único ponto está logo no início (um arquivo-ponto), o nome inteiro é tratado como base — isso evita confundir um marcador de prefixo oculto com uma extensão.

O que acontece se meus novos nomes colidirem?

A lista de pré-visualização destaca duplicatas em vermelho e mostra um selo com a contagem. Clicar em "Baixar como ZIP" enquanto há duplicatas é bloqueado com uma mensagem de erro — sua lista de arquivos não se perde, basta ajustar as regras e tentar novamente. Soluções comuns: habilitar a numeração, aumentar o preenchimento (pad), adicionar prefixo/sufixo.

Pode renomear pastas / preservar o aninhamento?

Ainda não. A versão atual lida com uma única lista plana de arquivos. Para renomeação em lote ciente de diretórios, renomeie os arquivos aqui e depois monte a árvore de diretórios usando a ferramenta ZIP Pack.

A busca e substituição suporta regex?

Não. Usa correspondência literal de strings (split-join) propositalmente, para que os usuários não disparem por engano tokens da string de substituição como $1 ou $& na substituição. A correspondência simples cobre a vasta maioria das necessidades de limpeza.

Quantos arquivos pode lidar?

Não há limite rígido na quantidade — a pré-visualização é praticamente gratuita. O empacotamento é limitado pela memória do navegador: totais muito grandes (vários GB) podem falhar ao alocar um único Blob; nesse caso, divida os arquivos em lotes e empacote cada um separadamente.

O ZIP baixado mostra nomes não-ASCII corrompidos. Por quê?

O JSZip grava nomes de arquivo em UTF-8 por padrão, que extratores modernos (Archive Utility do macOS, Explorador do Windows 11, 7-Zip, WinRAR 5+) leem corretamente. O antigo Explorador do Windows no Win 7/8 ainda pode decodificar mal nomes não latinos — use 7-Zip ou Bandizip no lugar.

Posso desfazer uma renomeação se eu cometer um erro?

As renomeações só acontecem no momento do download — até você clicar em "Baixar como ZIP" ou "Baixar este arquivo", os arquivos originais no disco permanecem intocados. A pré-visualização é totalmente reversível: limpe as regras, edite-as ou remova arquivos individuais da lista. Se você já baixou, basta ajustar as regras e baixar novamente a partir dos mesmos arquivos de origem.