Encontre e renomeie arquivos sem extensão?
-
06-07-2019 - |
Pergunta
Então, eu tenho um monte de arquivos sem extensão. Eu quero escrever um script de lote do Windows que vai:
- Encontre arquivos sem extensão (em uma pasta especificada)
- Adicione .bla ao final do nome do arquivo
Eu sou um script em lote do Windows noob, nem sei por onde começar. Sugestões?
Solução
Para arquivos em lote do Windows, isso renomeará apenas arquivos sem extensão para a extensão .bla:
rename *. *.bla
Observe que o primeiro argumento é uma estrela e um ponto: *.
O segundo argumento é: *.bla
A combinação inicial do ponto (*.) Representa arquivos sem extensões nesse contexto.
Antes da:
06/21/2009 11:57 PM 6 test
06/21/2009 11:57 PM 7 test.exe
06/21/2009 11:57 PM 7 test2
Depois:
06/21/2009 11:57 PM 6 test.bla
06/21/2009 11:57 PM 7 test.exe
06/21/2009 11:57 PM 7 test2.bla
Nota adicional: a linha de comando oposta renomearia todos os arquivos .bla em arquivos de extensão.
EDITAR:
Para renomear recursivamente os arquivos sem extensão entre os subdiretos (não suporta espaços nos caminhos):
@echo off
FOR /F %%i in ('dir /b/s/A-d') DO (
if "%%~xi" == "" rename "%%~fi" "%%~ni.bla"
)
Edit2:
Para renomear recursivamente os arquivos sem extensão nos subdiretos (suporta espaços no caminho):
@echo off
for /f "tokens=* delims= " %%i in ('dir /b/s/A-d') DO (
if "%%~xi" == "" rename "%%~fi" "%%~ni.bla"
)
Outras dicas
Aqui está outro comando possível para renomear arquivos sem extensões recursivamente (assumindo que Caminhos de arquivo não contêm espaços):
for /f %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla"
Versão em lote (com dobrado %
):
@echo off
for /f %%i in ('dir *. /b /s /a-d') do (
rename "%%~fi" "%%~ni.bla"
)
Se nomes de arquivo ou pastas contêm espaços, use este comando em vez disso:
for /f "tokens=* delims= " %i in ('dir *. /b /s /a-d') do rename "%~fi" "%~ni.bla"
Versão em lote:
@echo off
for /f "tokens=* delims= " %%i in ('dir *. /b /s /a-d') do (
rename "%%~fi" "%%~ni.bla"
)
Editar: Aqui está ainda mais curta uma linha que suporta espaços nos caminhos:
for /r %i in (*.) do ren "%~fi" "%~ni.bla"
Versão em lote:
@for /r %%i in (*.) do ren "%%~fi" "%%~ni.bla"
Para fazer isso nos subdiretos, use isto:
for /f %a in ('dir /b /ad /s') do rename %a\*. *.bla
Se você estiver usando isso em um arquivo em lote, precisará dobrar o '%'
for /f %%a in ('dir /b /ad /s') do rename %%a\*. *.bla
editar:
E se você tiver espaços em seus nomes de diretórios, poderá tentar esta (versão em lote):
for /f "tokens=* delims= " %%a in ('dir /b /ad /s') do rename "%%a\*." "*.bla"