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)
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)
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&.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
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()}
Where {-Not $_.PSIsContainer} |
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
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!
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"))
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
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
).
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.
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.
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
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.   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 …
.
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