2009-11-04 00:22:52 +0000 2009-11-04 00:22:52 +0000
65
65

Existe uma forma de renomear os ficheiros por lotes para minúsculas?

Preciso de uma forma de renomear todos os ficheiros em pastas e subpastas para minúsculas.

Gostaria de saber se existe uma forma de o fazer utilizando apenas* janelas (XP ou 7)

Respostas (13)

128
128
128
2012-04-14 13:25:17 +0000

Ir para o directório e executar o seguinte comando:

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

Aqui está a desagregação no caso de alguém querer modificar/aperfeiçoar :

  • for /f - Para cada linha
  • "Tokens=*" - Processar cada item em cada linha.
  • %f in (...) - %f - dir é o seu nome variável para cada item.
  • /l - lista todos os ficheiros e subdirectórios de um directório.
  • /b - (parâmetro para dir) Utiliza minúsculas.
  • /a-d - (parâmetro para dir) Utiliza formato nua, apenas os nomes do ficheiro/directório, sem tamanho, sem cabeçalhos.
  • a - (parâmetro para dir) Fazer não* lista directórios. (attribute& significa -, not significa d e directory significa rename "%f" "%f").
  • dir- renomeia o ficheiro com o seu próprio nome, o qual é na realidade minúsculo pelo comando /l e pela combinação 0x6&.
18
18
18
2009-11-04 00:26:39 +0000

O spacetornado Renamer é um programa do Windows que renomeia quantidades maciças de ficheiros em lotes. Pode pesquisar e substituir texto, remover um certo número de caracteres, mudar a maiúscula para minúscula, maiúscula ou primeira letra, e adicionar texto ao início ou fim (anexar/preender) de cada nome de ficheiro

12
12
12
2015-02-24 18:33:51 +0000

Uma vez que o Windows 7 pode usar PowerShell para essas tarefas

Get-ChildItem "C:\path\to\folder" -recurse | 
  Where {-Not $_.PSIsContainer} | 
  Rename-Item -NewName {$_.FullName.ToLower()}
  • Escolha a sua pasta raiz
  • todos os files dentro da pasta raiz e subpastas são renomeados
  • os nomes das pastas são excluídos com Where {-Not $_.PSIsContainer} |
9
9
9
2016-07-21 22:07:04 +0000

Aqui está uma solução adequada de linha de comando recursiva usando apenas comandos nativos cmd.exe que realmente funciona. Creio 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 estiver disposto a ir além dos comandos nativos cmd.exe, então outra opção é o meu JREN.BAT utilitário de renomeamento de expressão regular que suporta opções para converter nomes para maiúsculas ou minúsculas. É puro script (JScript/batch híbrido) que corre nativamente em qualquer máquina Windows a partir de XP - não são necessários ficheiros exe de terceiros. A documentação completa é integrada - acedida a partir da linha de comando via jren /?, ou jren /?? se quiser saída paginada.

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

jren "^" "" /s /l
6
6
6
2009-12-05 20:17:27 +0000

O meu utilitário pessoal preferido de nomenclatura de ficheiros de lote é Cylog’s WildRename . Entre muitas outras características, pode alterar o caso dos nomes dos ficheiros. A melhor coisa sobre WildRename é provavelmente que suporta expressões regulares!

5
5
5
2016-05-06 15:53:33 +0000

Versão “Recursiva” da resposta aceite (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 laço

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

Obtém uma lista dos caminhos absolutos de todos os directórios dentro da corrente (incluindo ela):

C:\Foo>

  • C:\Foo \TO. txt

  • C:\Foo]Bar* \PARA BAIXO. txt

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


O segundo laço

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 ficheiros (ou nomes de ficheiros e nomes de directórios se retirar o interruptor /a-d) dentro de cada um dos caminhos absolutos encontrados pelo primeiro laço, e converte o nome destes ficheiros para minúsculas.

  • C:\Foo\ TO.txt

  • C:\Foo\Bar\ LOWER.txt

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


* precisa de dois loops porque o segundo argumento para rename tem de ser um nome de ficheiro e não um desvio absoluto (como o obtido pelo interruptor /s).

3
3
3
2013-04-07 17:06:17 +0000

Poderia usar uma estratégia de “substituição de carácter”…

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

…e assim por diante, para as letras A-Z. Poderia provavelmente implementá-la sob a forma de um laço FOR.

1
1
1
2011-03-03 00:33:58 +0000

O melhor programa para fazer isto no Windows é Utilitário de Renomeação a Granel . É uma ferramenta de homem. Pode até usar o regex para renomear ficheiros e/ou pastas. Também tem integração shell (para que possa executar a partir do explorador com um clique direito), o que é muito agradável. Estão disponíveis versões de 64 bits e 32 bits.

1
1
1
2009-11-04 00:56:45 +0000

http://www.dostips.com/DtCodeCmdLib.php#Function.toLower dá uma função simples que deve ser capaz de incluir e chamar a partir de um ficheiro de lote.

Faça com que o ficheiro de lote itere sobre as pastas/nomes de ficheiro, e chame esta função para gerar a versão em minúsculas do nome.

1
1
1
2009-12-05 19:54:00 +0000

A partir de http://windowsitpro.com/articles/index.cfm?articleid=81612 :

Usando apenas comandos padrão, eu tenho o script LwrCase.bat e LwrCase_Folder.bat, para renomear um nome de ficheiro para minúsculas, ou renomear todos os nomes de ficheiro numa pasta para minúsculas.

Para renomear um nome de ficheiro para minúsculas, use:

[call] LwrCase FullyQualifiedFileName

Onde FullyQualifiedFileName é o nome de ficheiro totalmente qualificado a ser renomeado.

Para renomear todos os nomes de ficheiros num directório, use:

[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]

onde FullyQualifiedDirectoryName é o caminho de pasta totalmente qualificado, e /S é um parâmetro opcional que também renomeará os nomes dos ficheiros em todas as subpastas.

NOTA: LwrCase.bat faz uso da chave /L do comando DIR, que devolve nomes em 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
1
1
2017-05-30 15:01:22 +0000

A resposta aceite ](https://superuser.com/q/65302/150988#412413) a esta pergunta, por loftysnake , funciona para o directório actual mas não pesquisa subpastas. &nbsp Sawny sugeriu uma simples modificação à resposta de loftysnake para torná-la recursiva, mas não funciona, porque, enquanto o comando rename lhe permite especificar uma unidade e caminho com nome de ficheiro1 (a fonte), o nome de ficheiro2 (o destino) deve ser apenas um nome de ficheiro.  para citar a mensagem de ajuda (/?),

& > … não pode especificar uma nova unidade ou caminho para o seu ficheiro de destino.

mas move funciona onde rename não funciona, pelo que pode renomear recursivamente os ficheiros para minúsculas com este comando:

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

porque se verifica que Move pode lidar com caminhos de directório.

O comando acima funciona quando digitado directamente no Prompt de Comando (CMD.EXE).  se quiser fazer isto a partir de um ficheiro batch (.BAT), deve duplicar os % caracteres:

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

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

0
0
0
2014-11-06 00:08:21 +0000

Solução recursiva. Colocar isto num ficheiro 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
0
0
2016-03-30 10:50:39 +0000

Powerershell

Navegar até à represa e correr:

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

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