wake-up-neo.com

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

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

Eu gostaria de saber se há uma maneira de fazer isso usando apenas janelas (XP ou 7)

62
ino

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 no caso de alguém querer modificar/melhorar:

  • for /f - Para cada linha
  • "Tokens=*" - processa cada item em todas as linhas.
  • %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, somente os nomes de arquivos/diretórios, sem tamanho, sem cabeçalhos.
  • /a-d - (parâmetro para dir) Do not lista diretórios . (a significa attribute, - significa not e d significa directory) .
  • rename "%f" "%f"- renomeia o arquivo com seu próprio nome, que é na verdade diminuído pelos comandos dir e /l.
119
loftysnake

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

enter image description here

18
joe

Desde o Windows 7 você poderia usar 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} |

11
nixda

Aqui está uma solução de linha de comando recursiva adequada usando apenas comandos nativos do 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 é my tilitário de renomeação de expressão regular JREN.BAT 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 de XP em diante - sem necessidade de arquivos exe de terceiros. 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
6
dbenham

Meu utilitário favorito de renomeação de arquivos em lote é Cylog's WildRename . 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!

6
Synetech

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 (incluindo):

C:\Foo>

  • C:\Foo\TO.txt

  • C:\Foo\Bar\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 nomes de diretório se você retirar o switch /a-d) dentro de cada um dos caminhos absolutos encontrado pelo primeiro loop e converte o nome desses arquivos em minúsculas.

  • C:\Foo\TO.txt

  • C:\Foo\Bar\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 switch /s).

5
wc.matteo

Você poderia usar uma estratégia de "substituição de personagem" ...

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.

3
DednDave

http://www.dostips.com/DtCodeCmdLib.php#Function.toLower fornece uma função simples que você deve poder incluir e chamar de um arquivo de lote.

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

1
Kevin Haines

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 com o Shell (assim você pode executar a partir do Explorer com um clique direito), o que é muito bom. Versões de 64 bits e 32 bits disponíveis.

1
ubiquibacon

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

… Você não pode especificar uma nova unidade ou caminho para o seu arquivo de destino.

Mas move funciona onde rename não, portanto, você pode renomear recursivamente 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 de dentro de um arquivo batch (.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 os parênteses e o /y e dizer apenas do move ….

1
Adrian

De http://windowsitpro.com/articles/index.cfm?articleid=81612 :

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 arquivo em uma pasta para minúsculas.

Para renomear um nome de arquivo para minúsculo, 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
1
Even Mien

Powershell

Navegue até o diretório e execute:

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

Eu verifiquei que isso funciona. Encontrado aqui: http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx

0
JP Hellemons

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
)
0
Mick