Arquivo em lote para renomear espaços com um ponto, exceto a parte - e tê-lo em minúsculas

1

Estou tentando renomear um arquivo de The Big Bang Theory - The Prom Equivalency.mp4 para the.big.bang.theory-the.prom.equivalency.mp4 com um script em lote. Aqui está o que eu tenho até agora:

@ECHO OFF
setlocal enabledelayedexpansion
FOR %%f IN (%*) DO (
    set filename=%%~nf
    set filename=!filename: =.!
    set filename=!filename: .-.=-!
    rem uncomment for debugging.
    rem if not "!filename!"=="%%~nf" ECHO RENAME "%%~dpnxf" "!filename!%%~xf" >> "%TEMP%\test.txt"
    rem comment for debugging.
    if not "!filename!"=="%%~nf" RENAME "%%~dpnxf" "!filename!%%~xf"
)

O arquivo que recebo é The.Big.Bang.Theory.-.The.Prom.Equivalency.mp4 .

Qual é o truque de mágica para não deixar colocar pontos nos dois lados de - e como posso trabalhar no script o comando minúsculo?

    
por Ólafur Björnsson 08.11.2014 / 00:34

1 resposta

1

What is the magic trick to not let it put dots on both sides of the dash?

Vamos voltar a isso.

How do I get rid of the dots on both sides of the dash?

Altere seu

set filename=!filename: .-.=-!

declaração para

set filename=!filename:.-.=-!

porque, do jeito que você tem agora, você está procurando (espaço, ponto, traço, ponto), e essa sequência não está presente.

OK, agora,

What is the magic trick to not let it put dots on both sides of the dash?

Basta inverter a ordem das suas declarações := (e ajustar adequadamente o traço).

set filename=!filename: - =-!
set filename=!filename: =.!

Dessa forma, você elimina os espaços ao redor do painel antes de alterar os espaços entre as palavras para pontos.

“how can I work into the script the lowercase command?”

Bem, você poderia fazer

set filename=!filename:A=a!
set filename=!filename:B=b!
set filename=!filename:C=c!
        ⋮

que não é muito elegante. Mas tem sido apontado para mim que isso pode ser feito tão bem quanto

set filename=!filename:a=a!
set filename=!filename:b=b!
set filename=!filename:c=c!
        ⋮

porque a correspondência de sequência := … é feita de maneira não diferencia maiúsculas de minúsculas (por exemplo, :q=ent mudará “sqimQal” para “sentimental”). Então, adaptando a resposta do Magoo ao Converter nome do arquivo de maiúsculas para baixo… , podemos simplificar isso para

for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
    set filename=!filename:%%a=%%a!
)
    
por 08.11.2014 / 01:09