Existe uma maneira de renomear arquivos em lote para letras minúsculas?

59

Eu preciso de uma maneira de renomear todos os arquivos em pastas e subpastas para minúsculas.

Gostaria de saber se existe uma maneira de fazer isso usando apenas janelas (XP ou 7)

    
por ino 04.11.2009 / 01:22

13 respostas

114

Vá para o diretório e execute o seguinte comando:

for /f "Tokens=*" %f in ('dir /l/b/a-d') do (rename "%f" "%f")

Aqui está o detalhamento, caso alguém queira modificar / melhorar:

  • for /f - para cada linha
  • "Tokens=*" - processa cada item em cada linha.
  • %f in (...) - %f é o nome da variável para cada item.
  • dir - lista todos os arquivos e subdiretórios em um diretório.
  • /l - (parâmetro para dir) Usa minúsculas.
  • /b - (parâmetro para dir) Usa o formato simples, apenas os nomes de arquivos / diretórios, sem tamanho, sem cabeçalhos.
  • /a-d - (parâmetro para dir) Não lista diretórios . ( a representa attribute , - representa not e d representa directory ) .
  • rename "%f" "%f" - renomeie o arquivo com seu próprio nome, que é, na verdade, diminuído pelo comando dir e /l .
por 14.04.2012 / 15:25
18

spacetornado Renamer é um programa do Windows que renomeia grandes quantidades de arquivos em lotes. Você pode pesquisar e substituir texto, remover um certo número de caracteres, alterar o caso para maiúscula, letra maiúscula ou maiúscula e adicionar texto ao início ou fim (acrescentar / preceder) de cada nome de arquivo

    
por 04.11.2009 / 01:26
11

Desde o Windows 7, você pode usar o PowerShell para essas tarefas

Get-ChildItem "C:\path\to\folder" -recurse | 
  Where {-Not $_.PSIsContainer} | 
  Rename-Item -NewName {$_.FullName.ToLower()}

- Escolha sua pasta raiz
- todos os arquivos dentro da pasta raiz e subpastas são renomeados | - os nomes das pastas são excluídos com Where {-Not $_.PSIsContainer} |

    
por 24.02.2015 / 19:33
6

Aqui está uma solução de linha de comando recursiva apropriada usando apenas comandos nativos cmd.exe que realmente funcionam. Eu acredito que é a solução nativa mais simples possível:

for /r %D in (.) do @for /f "eol=: delims=" %F in ('dir /l/b/a-d "%D"') do @ren "%D\%F" "%F"

Se você estiver disposto a ir além dos comandos nativos cmd.exe, outra opção é o meu JREN.BAT utilitário de renomeação de expressão regular que suporta opções para converter nomes em maiúsculas ou minúsculas. É puro script (híbrido JScript / batch) que é executado nativamente em qualquer máquina Windows do XP em diante - sem necessidade de arquivos exe de terceiros. A documentação completa é construída - acessada a partir da linha de comando via jren /? , ou jren /?? se você quiser saída paginada.

Com o JREN, a solução recursiva é tão simples quanto:

jren "^" "" /s /l
    
por 22.07.2016 / 00:07
5

Meu utilitário pessoal de renomeação de arquivos em lote é WildRename do Cylog. Entre muitos outros recursos, ele pode alterar o caso de nomes de arquivos. A melhor coisa sobre o WildRename é provavelmente que ele suporta expressões regulares!

    
por 05.12.2009 / 21:17
5

Versão "recursiva" da resposta aceita (que funciona *)

for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"') do (for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g"))

O primeiro loop

for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"')

Obtém uma lista dos caminhos absolutos de todos os diretórios dentro do atual (inclusive):

C: \ Foo>

  • C: \ Foo \ TO.txt

  • C: \ Foo \ Barra \ LOWER.txt

  • C: \ Foo \ Bar \ Baz \ CASE.txt

O segundo loop

for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g")

Obtém uma lista de todos os nomes de arquivos (ou arquivo e diretório se você remover a opção /a-d ) dentro de cada dos caminhos absolutos encontrados pelo primeiro loop , e converte o nome desses arquivos para minúsculas.

  • C: \ Foo \ TO.txt

  • C: \ Foo \ Barra \ LOWER.txt

  • C: \ Foo \ Bar \ Baz \ CASE.txt

* ele precisa de dois loops porque o segundo argumento para rename deve ser um nome do arquivo e não um caminho absoluto (como aquele obtido pelo /s interruptor).

    
por 06.05.2016 / 17:53
3

Você pode usar uma estratégia de "substituição de caracteres" ...

set Name=%Name:A=a%
set Name=%Name:B=b%
set Name=%Name:C=c%

... e assim por diante, para as letras A-Z. Você provavelmente poderia implementá-lo na forma de um loop FOR.

    
por 07.04.2013 / 19:06
1
O

link fornece uma função simples que você deve poder incluir e chamar de um arquivo em lote.

Portanto, faça com que o arquivo em lote faça a iteração das pastas / nomes de arquivos e chame essa função para gerar a versão em letras minúsculas do nome.

    
por 04.11.2009 / 01:56
1

De link :

Usando apenas comandos padrão, eu tenho scripts LwrCase.bat e LwrCase_Folder.bat, para renomear um nome de arquivo para minúsculas ou renomear todos os nomes de arquivos em uma pasta para minúsculas.

Para renomear um nome de arquivo para minúscula, use:

[call] LwrCase FullyQualifiedFileName

Onde FullyQualifiedFileName é o nome completo do arquivo a ser renomeado.

Para renomear todos os nomes de arquivos em um diretório, use:

[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]

onde FullyQualifiedDirectoryName é o caminho da pasta totalmente qualificada e / S é um parâmetro opcional que também renomeia nomes de arquivos em todas as subpastas.

Observação: LwrCase.bat usa a opção / L do comando DIR, que retorna nomes de minúsculas.

LwrCase.bat contém:

@echo off
if {%1}=={} @echo Syntax: LwrCase FullyQualifiedFileName&goto :EOF
if not exist %1 @echo LwrCase - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
 set file=%%a
)
if /i "%file:~0,1%" EQU "d" @echo LwrCase - %1 is NOT a file.&endlocal&goto :EOF
for /f "Tokens=*" %%f in ('dir %1 /L /b /a /a-d') do (
 Rename %1 "%%f"
)
endlocal

LwrCase_Folder.bat contém:

@echo off
if {%1}=={} @echo Syntax: LwrCase_Folder FullyQualifiedDirectoryName&goto :EOF
if not exist %1 @echo LwrCase_Folder - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
 set folder=%%a
)
if /i "%folder:~0,1%" NEQ "d" @echo LwrCase_Folder - %1 is NOT a folder.&endlocal&goto :EOF
pushd %1
set sw=/B /A /A-D
if /i {%2}=={/S} set sw=%sw% %2
for /f "Tokens=*" %%f in ('dir %sw%') do (
 call LwrCase "%%f"
)
popd
endlocal
    
por 05.12.2009 / 20:54
1

O melhor programa para fazer isso no Windows é Bulk Rename Utility . É uma ferramenta do homem. Você pode até usar o regex para renomear arquivos e / ou pastas. Ele também tem integração shell (assim você pode executar a partir do explorador com um clique direito), o que é muito bom. Versões de 64 bits e 32 bits disponíveis.

    
por 03.03.2011 / 01:33
1

A resposta aceita para esta questão, por loftysnake , funciona para o diretório atual, mas não pesquisa subpastas. Sawny sugeriu um simples modificação à resposta de loftysnake para torná-lo recursivo, mas não funciona porque, enquanto o comando rename permite que você especifique uma unidade e caminho com nome de arquivo1 (thesource), filename2 (thedestination) deve ser apenas um nome de arquivo. Para citar a mensagem de ajuda ( /? ),

… you cannot specify a new drive or path for your destination file.

Mas move funciona onde rename não, para que você possa renomear recursivamente os arquivos para minúsculas com este comando:

for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (move /y "%f" "%f")

porque acontece que Move pode lidar com caminhos de diretório.

O comando acima funciona quando digitado diretamente no Prompt de Comando ( CMD.EXE ). Se você quiser fazer isso a partir de um arquivo em lote ( .BAT ), você deve dobrar os caracteres % :

for /f "Tokens=*" %%f in ('dir /l/b/a-d/s') do (move /y "%%f" "%%f")

E você provavelmente pode deixar de fora os parênteses e o /y e diga apenas do move … .

    
por 30.05.2017 / 17:01
0

Solução recursiva. Coloque isso em um arquivo recursiverename.cmd ..

for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
for /r /d %%x in (*) do (
    pushd "%%x"
    for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
    popd
)
    
por 06.11.2014 / 01:08
0

PowerShell

Navegue até o diretório e execute:

dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }

Eu verifiquei que isso funciona. Encontrado aqui: link

    
por 30.03.2016 / 12:50