Por que o ren deixa o “e” na tarefa simples de renomear?

0

Eu tenho listas de arquivos que gostaria de renomear em lote.

Os nomes dos arquivos de origem são "SlideXX.BMP" (XX sendo o número de 1 a qualquer outro).

Gostaria de renomeá-los para "bbrdXX.BMP"

Quando executo ren Slide* bbrd* , o ren executa, mas, ao contrário do esperado, tudo se torna "bbrd e XX.BMP".

Por que isso ocorre?

    
por Shintaro Takechi 13.10.2016 / 20:00

3 respostas

0

Eu usaria o PowerShell, em cmd poderia ser um pouco mais complicado para você conseguir o que você quer.

$x = gci C:\yourpath | % { gi $_.FullName | rni -newname ($_ -replace "Slide","bbrd") }

Em detalhes:

  • Primeiro, ele pesquisa todos os arquivos dentro do diretório com Get-ChildItem alias gci
  • Em seguida, ele percorrerá cada arquivo com foreach-object alias %
  • Em seguida, chama o item pela sua propriedade fullname com get-item alias gi
  • O item é passado para o pipeline e renomeado por rename-item alias rni
  • Dentro da parte rni , ela substitui Slide por bbrd do objeto atual e será salva com o novo nome.

para executar isso de forma recursiva se você tiver subpastas que também possuam arquivos que precisem ser renomeados, basta adicionar -r à sua chamada gci e também adicionar filter para segmentar apenas os arquivos desejados:

$x = gci C:\yourpath -r -filter *.bmp | % { [...] }

    
por 15.10.2016 / 18:28
0

O slide tem 5 letras. O BBRD tem 4 letras de comprimento. Se você puder usar o bbrd_, o e será substituído também. Se você estiver disposto a fazer duas etapas:

  • ren "Slide *" "/ . "
  • ren lide * bbcd *

O primeiro ren tira o S ou reduz o comprimento em um. O segundo ren então faz a conversão para o bbrd sem erro, já que o lide tem 4 letras também

    
por 13.10.2016 / 21:13
0

Eu não acho que em lote há complex scripting necessário. É tão simples quanto

@echo off & setlocal EnableExtensions EnableDelayedExpansion
for %%A in (Slide*.bmp) do Set A=%%~nxA&Ren "%%A" "!A:Slide=bbrd!"

Se a DelayedExpansion estiver ativada por padrão, ela também é um liner do console:

for %A in (Slide*.bmp) do Set A=%~nxA&Ren "%A" "!A:Slide=bbrd!"
    
por 20.10.2016 / 02:13