Como faço para diminuir os nomes dos arquivos e suas extensões em um diretório de forma recursiva

0

Estou ciente de que já há perguntas como esta, mas elas também:

  • Lance erros que o arquivo não pode ser encontrado
  • Não funcione ou eles são maiúsculos

Não consigo postar comentários nas outras respostas postadas devido à baixa reputação.

Eu também não me importo se o .bat foi executado no diretório de destino ou executado diretamente na linha de comando. Eu só posso fazer coisas básicas no MS-DOS.

Até agora, posso definir o diretório que desejo:

x:
cd x:/folder1/folder2/target_folder

O resultado que quero é o seguinte:

some_folder_in_target_folder/IMAGE1.jpg
some_folder_in_target_folder/Second/image1.JPG
some_folder_in_target_folder/Second/IMAGE2.JPG
some_folder_in_target_folder/Second/image3.jpg

para aparecer como:

some_folder_in_target_folder/image1.jpg
some_folder_in_target_folder/Second/image1.jpg
some_folder_in_target_folder/Second/image2.jpg
some_folder_in_target_folder/Second/image3.jpg

Eu não quero modificar os próprios nomes das pastas.

Esses arquivos estão em uma unidade USB. Não sei se isso está causando alguns dos erros que vi dos outros exemplos de código que tentei.

    
por Nova 12.06.2017 / 08:10

1 resposta

0

Eu discordo de Seth e Luru neste caso especial, há uma solução maravilhosa com uma pequena falha, esse cmd linha deve remediar que (se a saída parece certo, remova o eco):

For /r X:\Path %A in (.) do @For /f "eol=: delims=" %F in ('dir /l/b/a-d "%A" 2^>NUL') do @Ren "%~fA\%F" "%F"

Em um lote, o % precisa ser dobrado:

For /r X:\Path %%A in (.) do @for /f "eol=: delims=" %%F in (
  'dir /l/b/a-d "%%A" 2^>NUL'
) do Ren "%%~fA\%%F" "%%F"

Pelo contrário, a conversão para maiúsculas seria desajeitada em lote.

Uma solução de powershell:

Get-ChildItem -Path X:\path -File|
  where-Object {$_.Name -cne $_.Name.ToLower()}|
    Rename-Item -NewName {$_.Name.ToLower()} -confirm

O mesmo acontece com os aliases de um único liner:

gci -Path X:\path -File|? {$_.Name -cne $_.Name.ToLower()}|Ren -new {$_.Name.ToLower()} -confirm
    
por 12.06.2017 / 11:21