Pergunta

Então, eu tenho um monte de arquivos sem extensão. Eu quero escrever um script de lote do Windows que vai:

  1. Encontre arquivos sem extensão (em uma pasta especificada)
  2. 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?

Foi útil?

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"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top