adiciona “text” ao final de múltiplos nomes de arquivos

5

Usando o código abaixo, adiciono texto ao final dos nomes dos arquivos:

1.mp3
2.mp3

e deve ser:

1text.mp3
2text.mp3

mas mudou para:

1.mp3text
2.mp3text

Código:

@ECHO ON

FOR %%A IN ("C:\Users\user123\Desktop\mp3\*.mp2") DO (
    CALL :RenameFiles "%%~A" "%%~NXA"
)
GOTO EOF

:RenameFiles

SET fname=%~2
SET renname=%fname=%
REN "%~1" "%renname%text%"
GOTO E
    
por user123 29.11.2015 / 13:32

3 respostas

2

Como adiciono "texto" ao final de vários nomes de arquivos.

Before: 1.mp3 2.mp3

After: 1text.mp3 2text.mp3

Existem vários erros no seu arquivo de lote, por exemplo:

  • *.mp2 deve ser *.mp3
  • goto E - o rótulo :E está faltando.
  • você não precisa call de nada.

Arquivo em lote de trabalho simples

rem @echo off
setlocal
setlocal enabledelayedexpansion
for %%a in ("C:\Users\user123\Desktop\mp3\*.mp3") do (
    copy "%%a" "%%~dpnatext%%~xa"
    del "%%a" 
)
endlocal

Notas:

  • O arquivo em lote funcionará com qualquer tamanho de nome de arquivo, portanto, por exemplo, 12345.mp3 será renomeado para 12345text.mp3

cmd da solução shell

Você não precisa usar um arquivo em lotes. Você pode simplesmente usar:

cd C:\Users\user123\Desktop\mp3\
ren ?.mp3 ?text.mp3

Ou:

ren *.mp3 ?text.mp3

Observe que o seguinte não funciona:

ren *.mp3 *text.mp3

Você receberá nomes de arquivo como 1.mp3text.mp3 com esse comando.

Exemplo:

F:\test>dir *.mp3
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

29/11/2015  12:52                 0 1.mp3
29/11/2015  12:52                 0 2.mp3
               2 File(s)              0 bytes
               0 Dir(s)  1,777,665,769,472 bytes free

F:\test>ren ?.mp3 ?text.mp3

F:\test>dir *.mp3
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

29/11/2015  12:52                 0 1text.mp3
29/11/2015  12:52                 0 2text.mp3
               2 File(s)              0 bytes
               0 Dir(s)  1,777,665,769,472 bytes free

Leitura Adicional

por 29.11.2015 / 13:58
5

Você pode adicionar texto ao final de qualquer nome de arquivo (antes do primeiro ponto, que geralmente é o início da extensão) usando uma série de ? que é pelo menos tão longa quanto o nome original. / p>

ren "C:\Users\user123\Desktop\mp3\*.mp3" ??????????????????????text.*

O ? corresponde e preserva qualquer caractere exceto . , e é livre para não corresponder a nada se ficar sem caracteres. Seu texto é então anexado e, em seguida, .* corresponde e preserva o ponto e o restante do nome.

Você pode modificar a máscara do arquivo de origem como quiser para corresponder aos arquivos desejados. A máscara de origem é totalmente independente da máscara de renomeação.

Veja Como o comando Windows RENAME interpreta curingas? para mais informações.

Se alguns de seus arquivos contiverem mais de um . no nome, você não poderá usar o comando simples REN sozinho. Uma opção é usar um script em lote:

@echo off
pushd "C:\Users\user123\Desktop\mp3\*.mp3"
for /f "delims= eol=:" %%F in ('dir /b /a-d *.mp3') do ren "%%F" "%%~nFtext%%~xF"
popd

Observe que é essencial usar o FOR / F e não o FOR simples. O FOR / F reúne todo o resultado do comando DIR antes de iniciar a iteração, enquanto o simples FOR inicia a iteração após o buffer interno estar cheio, o que aumenta o risco de renomear o mesmo arquivo várias vezes.

Eu uso EOL=: para proteger contra a possibilidade remota de um nome de arquivo começar com ; . O EOL padrão é ; , que ignora as linhas que começam com ; . Os nomes dos arquivos não podem conter : , portanto, é um caractere seguro para usar na opção EOL.

Uma pequena desvantagem de FOR / F com DIR / B é que ele não preserva as informações do caminho, e é por isso que usei o PUSHD no começo. Sem o PUSHD, você poderia incluir as informações do caminho no comando DIR, mas também precisaria incluir o caminho na máscara de origem REN. O seguinte liner funciona na linha de comando (sem script em lotes):

for /f "delims= eol=:" %F in ('dir /b /a-d "C:\Users\user123\Desktop\mp3\*.mp3"') do @ren "C:\Users\user123\Desktop\mp3\%F" "%~nFtext%~xF"

Uma alternativa é usar o comando FINDSTR para listar os arquivos, o que convenientemente preserva as informações do caminho:

for /f "delims=" %F in ('findstr /m "^" "C:\Users\user123\Desktop\mp3\*.mp3"') do @ren "%F" "%~nFtext%~xF"

Como cada arquivo listado começa com a letra da unidade, é seguro usar o padrão EOL=; .

Uma alternativa final - você pode usar meu utilitário de renomeação de expressão regular JREN.BAT . É um script puro (JScript / batch híbrido) que é executado nativamente em qualquer máquina Windows do XP em diante.

jren "(.*)(\.mp3)$" "$1text$2" /i /p "C:\Users\user123\Desktop\mp3"

Como o JREN é um script em lote, você precisaria usar o CALL JREN se usar o comando dentro de outro script em lote.

    
por 29.11.2015 / 16:22
0

Isso precisa ser feito em um arquivo de lote? AdvancedRenamer é um programa gratuito e muito versátil para renomear arquivos ou pastas em lote. Facilmente resolve seu problema.

    
por 29.11.2015 / 17:25