Como renomear vários nomes de arquivos removendo espaços em branco e caracteres? [duplicado]

0

Eu tenho vários arquivos para renomear

Eg:
     ERJP00300029 3.13.jpg
     SRKP00100002 12.04.jpg
     ERJP01500001 ERJP12 10.5.jpg

Eu quero renomear o arquivo acima como

Eg:
    ERJP00300029.jpg
    SRKP00100002.jpg
    ERJP01500001.jpg

Como manter o nome da primeira parte sozinho?

Eu usei o código abaixo, mas não consigo obter minha solução exata. Onde estou erro.

@ECHO ON

SETLOCAL ENABLEDELAYEDEXPANSION
SET SourceDir=F:\Ezhilarasan\Exibt\need_upload\ERHP\check
FOR /G "TOKENS=1-3 DELIMS=. " %%G IN ('DIR /B /A-D "%SourceDir%\*.jpg"') DO (
    SET "part1=%%~F" 
    SET "part2=%%~G" 
    SET "part3=%%~H"
    REN "!part1! \%SourceDir%!part2!.!part3!" "!part1!.!part3!"
)
GOTO EOF
    
por Ezhilarasan 22.12.2016 / 04:22

2 respostas

0

Bem, há várias coisas acontecendo:

  1. O seu sistema está configurado para usar um idioma diferente do inglês? No meu sistema (baseado em inglês), o comando que você está tentando fazer é FOR /F , não FOR /G .
  2. Você está extraindo três ( 1-3 ) tokens começando com %%G , mas você está usando %%F , %%G e %%H . Nada está sendo colocado em %%F . Altere a instrução FOR para se referir a %%F , ou altere o corpo do loop para usar %%G , %%H e %%I . Exceto…
  3. … não faça isso. Sua abordagem é falha. Pense no que significa ter período ( . ) e espaço como delimitadores. Seus nomes de arquivos são quebrados em tokens assim:

                                         #1              #2        #3    #4     #5
    ERJP00300029 3.13.jpg           →    ERJP00300029    3         13    jpg
    SRKP00100002 12.04.jpg          →    SRKP00100002    12        04    jpg
    ERJP01500001 ERJP12 10.5.jpg    →    ERJP01500001    ERJP12    10    5      jpg

    então,

    • o nome do arquivo nem sempre é igual a part1 part2.part3 ,
    • a extensão nem sempre é o terceiro token e, de fato,
    • para seus nomes de arquivos de exemplo, nunca o terceiro token e
    • nem sempre é o mesmo número de token.


    Precisamos voltar a isso.

  4. O que você acha que está fazendo com o comando REN (RENAME)? Especificamente, Por que você está colocando \%SourceDir% entre part1 e part2 ? A única esperança que você tem de fazer isso funcionar é colocar %SourceDir%\ antes part1 . E observe que a barra invertida ( \ ) precisa ser após %SourceDir% .
  5. Se este é o arquivo de lote completo, você não precisa fazer nada de especial no final. O arquivo em lote será encerrado quando chegar ao final. Mas, se isso faz parte de um sistema maior, você pode querer ter um comando de término explícito no final. Esse comando deve ser GOTO :EOF , não GOTO EOF .

Não acumular, mas sua abordagem de tirar a saída de DIR e imediatamente quebrá-lo em fichas é falho. Olhando seus nomes de exemplo, a string ERJP12 10.5 é dividida em três tokens: ERJP12 , 10 e 5 . Mas ERJP12.10.5 seria dividido nos mesmos tokens, e assim seria ERJP12 10 5 e ERJP12.10 5 . Você não pode reconstruir os nomes de arquivo originais (ou seja, atuais, existentes) dos tokens; você precisa capturar o nome do arquivo original intacto e, em seguida, dividi-lo.

Não vejo por que você precisa executar DIR . Tudo o que você precisa é de FOR %%F IN ("%SourceDir%\*.jpg") DO ; ele dará somente os nomes de arquivos (sem subdiretórios), e, ao contrário da saída de DIR , incluirá o nome do diretório de origem (o diretório que contém os arquivos). Agora que temos o caminho completo do arquivo atual em %%F , podemos começar a dividi-lo. Agora usamos FOR /F . Portanto, pegue a parte n ame de %%F , e puxe um token que é a primeira parte a solitária. Em seguida, renomeie o caminho completo original para a primeira parte mais a tensão e x . Este é o arquivo de lote completo:

SET SourceDir=F:\Ezhilarasan\Exibt\need_upload\ERHP\check
FOR %%F IN ("%SourceDir%\*.jpg") DO (
    FOR /F "DELIMS=. " %%A IN ("%%~nF") DO (
        REN "%%F" "%%A%%~xF"
    )
)
    
por 22.12.2016 / 08:06
0

Embora eu concorde com todas as explicações bem detalhadas de Scott, neste caso especial, um simples

@Echo On
Pushd F:\Ezhilarasan\Exibt\need_upload\ERHP\check
FOR /F  %%G IN ('DIR /B /A-D "*.jpg"') DO REN "%%G*.jpg" %%G.jpg
PopD

faria igualmente.
O padrão é for /f "tokens=1 delims= " O dir retorna apenas arquivos com o jpg ext para que possamos usá-lo literalmente na renomeação.

    
por 22.12.2016 / 09:31