Existe uma maneira de renomear em lote arquivos envolvendo o rearraging do nome do arquivo com base em letras maiúsculas e minúsculas.

1

Eu quero renomear uma grande quantidade de arquivos no formato:

Firstname LASTNAME ABC to yyyymmdd.pdf

em que ABC é um acrônimo aleatório e yyyymmdd é a data, para:

LASTNAME Firstname ABC to yyyymmdd.pdf

Está num computador que não pode ter software de terceiros, por isso ferramentas adoráveis como o Bulk Rename Utility estão fora de questão. Estou pensando em fazer um arquivo em lote para fazer isso, mas não sei por onde começar. Eu encontrei um monte de outras perguntas aqui e outros sites detalhando simplesmente como alterar o caso, mas eu não quero isso. O mais próximo que cheguei é saber que precisarei usar o FINDSTR, mas não tenho experiência suficiente com scripts de linha de comando para prosseguir.

    
por lolsail 29.09.2016 / 01:34

2 respostas

0

Ok, eu percebi. Reuniu um arquivo de lote de trabalho de cerca de dez outros exemplos aqui e em outros lugares:

@echo off
setlocal EnableDelayedExpansion

for /F "delims=" %%f in ('dir /A-D /B *.pdf') do (
   for /F "tokens=1-5 delims= " %%a in ("%%~Nf") do (
      ECHO ren "%%f" "%%b %%a %%c %%d %%e!%%~Xf"
      ren "%%f" "%%b %%a %%c %%d %%e!%%~Xf"
   )
)
    
por 29.09.2016 / 03:28
0

Sua resposta pode ser simplificada consideravelmente: -

for /F "tokens=1-2*" %%f in ('dir /A-D /B *.pdf') do (
    ECHO ren "%%f %%g %%h" "%%g %%f %%h"
    ren "%%f %%g %%h" "%%g %%f %%h"
)

Isso funciona porque: -

  • "tokens=1-2*" divide o nome do arquivo nos espaços, com Firstname em %%f , LASTNAME em %%g e todo o resto do nome do arquivo em %%h ;
  • não há loops incorporados, portanto, a expansão atrasada não é necessária (as variáveis de loop são implicitamente atrasadas); e
  • não há diretório no comando dir , portanto, nenhum manuseio de diretório especial é necessário na expansão da variável.

Se o script precisar trabalhar com um nome de diretório passado, coloque o texto acima com pushd %1 e popd .

    
por 29.09.2016 / 20:27