Como posso renomear arquivos em massa?

126

Eu tenho um monte de arquivos nomeados com o padrão 99 - DescriptiveName.txte gostaria de remover o número da frente para que eu tenha DescriptiveName.txt.

Como posso fazer isso? Posso fazer isso na linha de comando ou existe um utilitário que pode fazer isso?

CodeSlave
fonte

Respostas:

94

Eu sei que no seu título você diz "entre", mas tenho a impressão de que você está apenas procurando uma maneira de fazer isso e está se perguntando se essa é a melhor.

A melhor ferramenta absoluta que encontrei para isso é o Bulk Rename Utility .

Utilitário de renomeação em massa

Não é uma ferramenta de linha de comando, mas eles têm uma versão de linha de comando se você realmente quiser usá-la dessa maneira.

Eu usei muito a versão da GUI e é muito poderosa, muito rápida e extremamente fácil de usar.

Ah, e é GRÁTIS para uso pessoal.

Jim McKeeth
fonte
Infelizmente, a ferramenta não é gratuita para uso comercial :(
AntonK 28/10
Por isso eu disse que era grátis para uso pessoal.
Jim McKeeth
2
Esta é uma ferramenta super rápida. Resolveu o problema de 6.000 arquivos em segundos, usando várias lógicas de pesquisa e substituição. É como usar o Notepad ++, mas editar milhares de arquivos. Uma ótima solução, obrigado!
Amendoins
59

Um pequeno script do PowerShell:

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

Combinado com expressões regulares mais complexas, isso pode se tornar algo como:

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

O que transforma coisas como '01 - Beginning.mp3 'em' Beginning - 01.mp3 '.

Use o -WhatIfparâmetro Rename-Itemativado para verificar os renomeados antes de emiti-los.

sysrqb
fonte
1
@sysrqb, pesquise um pouco mais.
Joey
Substituir não requer duas expressões de cadeia? O segundo tem dois, o primeiro não. ... -replace '\d+ - ',''. Além disso, acredito que o primeiro é melhor, simplesmente retirando o início usando o regex. Embora eu acredite que você deva incluir a âncora ^ no início da expressão, para que ela corresponda apenas aos nomes que começam com números.
Xalorous 8/08
1
@Xalorous: Bem, você pode simplesmente experimentar. -replacepode ter apenas um argumento no lado direito; nesse caso, o segundo é implicitamente a string vazia.
Joey
Isso me salvou .. O Bulk Rename Utility agora falha e tentei muitas outras soluções. Isso é muito melhor para pessoas que se sentem confortáveis ​​com o regexp. Muito obrigado !!
Inkh Su Tesou
24

Se você realmente deseja usar a linha de comando do Windows (se não quiser fazer o download de algo), faça o seguinte:

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

A primeira linha gera a lista de arquivos em um arquivo chamado fileList.txt. A segunda linha separa cada um dos nomes da lista em 3 partes, o #, o "-" e o restante do nome. Para cada um deles, é necessário o comando rename.

zdan
fonte
2
Remova a primeira linha para simplificá-lo e fazer:for /f "tokens=1,2,3" %i in ('dir /B') DO ren "%i %j %l" %l
Eu sei que isso é antigo, mas ainda é uma resposta sólida - apenas o% l (% L) deve ser% k (% K) [tokens aumentam de% i (% I), então eu, J, K ...]
Donald Byrd
24

O AntRenamer facilita bastante definir um padrão de renomeação; já existem muitos já preparados (e fornece uma prévia das ações):

AntRenamer

Livre para uso pessoal e comercial.

Gnoupi
fonte
19

moda antiga:

Você pode fazer um DIR e redirecionar a saída para um arquivo, como em DIR * .TXT> TEMP.BAT

Em seguida, use um editor para retirar o que você não precisa e modificar as partes necessárias. Adicione um "@echo off" como linha superior, salve-o e execute-o.

WireGuy
fonte
Eu recebi esta referência de página de um doutorado da velha escola nisto: dostips.com/DosCommandIndex.htm ; É incrível o que você pode fazer com o (bom?) Antigo DOS!
nik
16

Outra opção: Renamer maciço de arquivos

Ele permite renomear facilmente vários arquivos e extensões de arquivo . É muito rápido e simples!

Para usuários e desenvolvedores avançados, é possível usar expressões regulares .

Veja em ação:

insira a descrição da imagem aqui

IvanRF
fonte
1
Btw como podemos selecioná-lo para abrir todos os arquivos em subpastas? Eu tenho uma pasta raiz com aproximadamente 50 subpastas (recursivamente) e vários arquivos dentro delas.
Pacerier 11/11/2015
1
@ Pacerier Acho que o seletor de arquivos Java não permite isso. Eu tive a ideia de permitir a seleção de uma pasta e a pesquisa recursiva pode ser incluída. Vou notar isso e adicioná-lo em uma versão futura!
IvanRF
13

Eu uso a ferramenta de renomeação total do Total Commander (ctrl + M) para coisas assim. Sua ferramenta útil, uma das muitas a serem contadas, é fácil de usar e também pode empregar expressões regulares e modelos, se necessário. Ah, e obviamente fornece uma visualização antes de fazer alterações.

Esta é a terceira ou quarta pergunta que eu respondi, recomendando o Total Commander ... Eu deveria receber uma comissão deles ;-)

Yuval
fonte
11

A ferramenta com a qual estou satisfeito é o ReNamer . Ele também suporta o salvamento de regras de renomeação, o que tem sido útil para mim, pois muitas vezes faço as mesmas renomeações.

Abaixo está um exemplo de como excluir texto antes do primeiro traço, mas há muitas outras regras que você pode definir.

insira a descrição da imagem aqui

Esko Luontola
fonte
5

Eu usei o Free Commander Portable (freeware) para isso:

  1. Selecione ou Navegue para os arquivos ou diretórios para renomear
  2. Pressione [Ctrl-M] (ou Arquivo> Renomear Múltiplas)
  3. preencha os campos como faz sentido para sua circunstância
  4. verifique se a visualização mostra o que você espera
  5. Ir!
Matt Wilson
fonte
4

Para usuários e desenvolvedores avançados, sugiro o RegexRenamer .

Imagem de RegexRenamer

Profissionais:

  • UI muito simples;
  • Expressões regulares com as quais os desenvolvedores estão familiarizados;
  • GPLv2;

Contras:

  • Não é uma linha de comando! :)
bytebuster
fonte
Não foi possível fazê-lo funcionar recursivamente para todas as subpastas da pasta selecionada!
Luckylooke
3

Aqui está uma solução de linha de comando - um programa Java que escrevi especificamente para facilitar o trabalho com "padrões" nos nomes de arquivos. É gratuito e de código aberto, portanto, fique à vontade para modificá-lo:

RenameWand
http://renamewand.sourceforge.net/

Alguns exemplos de uso relevantes:

Solte tudo antes do "-"no nome do arquivo:

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

Anexe um número de 3 dígitos ao nome do arquivo, classificando pela hora da última modificação:

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

Reorganize partes do nome do arquivo e altere maiúsculas e minúsculas:

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

Descobri o RenPhoric cerca de um mês atrás. Soberbo. E é grátis .

Nenhuma interface complicada e eu pude renomear rapidamente exatamente como eu queria. Capaz de expressão regular. Não usei mais nada desde então.

Virola de Umber
fonte
2

Eu gosto do WildRename do Cylog . É poderoso, mas fácil de usar e possui muitos recursos:

  1. velozes
  2. manipulação de cordas
  3. contadores
  4. curingas
  5. expressões regulares
  6. substituição
  7. conversão de caso
  8. exploração madeireira
  9. simulação (mostre os resultados sem aplicá-los)

insira a descrição da imagem aqui

Synetech
fonte
2

Como @zdan acima, eu fiz isso por linha de comando (usando "cmd.exe" no Windows). Foram necessários alguns ajustes para o meu caso em particular, mas um pouco de pesquisa o resolveu.

Como Zdan, eu saída a lista para um arquivo TXT, em seguida, usado tokense delimspara renomear os arquivos de acordo. No meu caso, comecei com uma lista de arquivos com o seguinte nome:

name-01-02-2012.csv

Eu queria que a parte da data do arquivo estivesse na ordem de y / m / d, com a parte "name" no final, para que fosse assim:

2012-01-02-name.csv

Para fazer isso em massa, usei o seguinte código. Observe que, ao fazer dessa maneira, TODAS as partes do nome do arquivo são consideradas, incluindo a extensão ".csv". Isso me enganou da primeira 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

O tokenssão as "partes" do nome do arquivo, o delimssão os separadores. Observe que, no meu caso, eu tinha 2 delimitadores (um traço e um ponto).

Pessoalmente, não ligo para o aplicativo "Renomear em massa". Como outros já mencionaram, a GUI é atroz e não muito intuitiva. Com um pouco de pesquisa e codificação simples, essas coisas podem ser muito mais eficientes e rápidas.

gtr1971
fonte
2

Nome engraçado e ferramenta de linha de comando muito poderosa, muito rápida e extremamente fácil de usar. "Localizar e substituir texto" FART http://fart-it.sourceforge.net/ FUNCIONA MUITO! também pode renomear palavras nos arquivos 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
fonte
Mais alguns detalhes? Será que renomear arquivos ?
vonbrand
Sim, -fopção, conforme listado.
user1016274
2

O script de renomeação múltipla é uma alternativa de código aberto à ferramenta Total Commanders Multi Rename, que você pode dirigir via script. Ele pode usar plugins do TC para obter informações de metadados.

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

majkinetor
fonte
2
@echo off
setlocal enabledelayedexpansion
defina X = 5
defina FOLDER_PATH =.
pushd% FOLDER_PATH%
para %% f em (*) faça se %% f neq% ~ nx0 (
    defina "filename = %% ~ nf"
    defina "filename =! filename: ~% X%!"
    ren "%% f" "! nome do arquivo! %% ~ xf"
)
popd

salve isso em um arquivo em lotes e execute

bbm123
fonte
Isso é bom, mas como posso fazer do X uma variável (passar como parâmetro)?
Kangkan
@Kangkan assim:set /p "X=Enter the value for X: "
Kidquick 12/04
1

Eu uso o Blackboard para administrar cursos em uma universidade. Quando faço o download de uma tarefa em massa (no Blackboard, clique na parte superior da coluna de classificação e, em seguida, em "download do arquivo de atribuição", o Blackboard adiciona várias coisas extras ao nome do arquivo - muitas vezes tornando o nome do arquivo muito longo para ser válido no Windows.

Aqui está a aparência deles:

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

E é isso que eu queria

studentname.docx

Então, usei a abordagem recomendada por @zdan e @ gtr1971, abrindo uma janela de comando na pasta com os arquivos dentro (CMD.EXE). Em seguida, execute este comando para colocar todos os nomes de arquivo em um documento.

dir /b >filelist.txt

Edite o documento e remova nomes de pastas etc.

Use este comando para substituir as coisas de nome de arquivo adicionadas pelo Blackboard apenas pelo nome de usuário e pela extensão do arquivo.

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 isso ajude outra pessoa também.

Webmentorman
fonte
1

Eu desenvolvi um utilitário de linha de comando híbrido JScript / lote chamado JREN.BAT que pode renomear arquivos ou pastas executando uma pesquisa de expressão regular e substituindo os nomes. É um script puro que será executado nativamente em qualquer máquina Windows a partir do XP. A documentação completa está incorporada no script.

Supondo que o JREN.BAT esteja no seu diretório atual, ou melhor ainda, em algum lugar no seu caminho, sua tarefa de renomeação se tornará trivial.

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

ou

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

Existem muitas opções, incluindo a /Sopção que executa recursivamente a renomeação nos subdiretórios.

dbenham
fonte
0

Se você precisa de poder sério e está disposto a gastar o dinheiro ... O PowerGrep é uma das ferramentas mais poderosas e versáteis do mercado ... você pode renomear quase tudo com o PowerGrep ... até pesquisa e substituição binárias ... foi criado por RegEx Guru, Jan Goyvaerts .

insira a descrição da imagem aqui

Eddie B
fonte
Este utilitário é insanamente caro ...
Wizard79
Você pode usá-lo gratuitamente indefinidamente ... no entanto, vale a pena ... Eu uso o tempo todo.
Eddie B