Adicione texto ao final do nome do arquivo (mas antes da extensão) usando o arquivo em lotes


18

Eu tenho uma lista de arquivos que estão no formato à esquerda. Quero acrescentar uma string a cada nome de arquivo, mas antes da extensão, como mostrado:

File 1.txt  ->  File 1 version 1.txt
File 2.txt  ->  File 2 version 1.txt
File 3.txt  ->  File 3 version 1.txt
File 4.txt  ->  File 4 version 1.txt
...

Em cada caso, a cadeia anexada é a mesma em todos os arquivos.

Parece uma tarefa simples, mas estou tendo problemas para colocar isso em um arquivo em lotes.

Eu tentei o rencomando e segui alguns dos exemplos desta página , mas os nomes de arquivos resultantes acrescentam a sequência após a extensão:

File 1.txt version 1.txt

As informações no link "esta página" do SS64 são extraídas das perguntas e respostas do usuário (com as minhas bênçãos): Como o comando RENAME do Windows interpreta caracteres curinga? Eu mantenho a resposta SU (raramente) à medida que descubro novos recursos.
dbenham

Respostas:


6

para nomes de arquivos mais longos, você terá que adicionar um pouco mais ?no bloco com a massa de?????????

ren *.?* ????????????????????????????????????????????????????????" version 1".*

2
Obrigado por responder tão prontamente! Editei o comando levemente, para manter a extensão do arquivo e afetar apenas os arquivos txt: ren * .txt ????????????????????????? "
1.txt

e se eu quiser acrescentar algo no início
Farhana Haque

quantos ? caracteres são necessários?
Kaveesh Kanwal

39

Em vez de confiar nas peculiaridades não documentadas de ren , por que não fazer isso da maneira correta?

for %a in (*.txt) do ren "%~a" "%~na version 1%~xa"

Se você quiser usar isso em um arquivo em lotes, lembre-se de dobrar cada sinal de%.


1
Excelente! esta é uma resposta melhor a qualquer dia. +1
Fr0zenFyr

2

Eu queria adicionar "_A" a vários arquivos e foi assim que o fiz.

Eu removi a extensão primeiro, adicionei o sufixo e depois mudei a extensão de volta ao original. Com certeza funcionou para mim e manteve o código do lote simples, pois não sou muito programador.

@ECHO OFF

REN *.pdf *.
REN *. *_A.
REN *. *.pdf

2

Para as pessoas que não têm experiência com comando (como eu), existem alguns softwares que tornam a renomeação em massa muito fácil:

  • Utilitário de renomeação em massa (sem código aberto)
  • Renomeie-o! (Código aberto)

1

A solução da @ bwDraco era boa, mas poderia ter sido mantida mais simples. Meu conjunto de arquivos era todos * .jpg e eu queria renomeá-los todos * c.jpg. Você só precisa de 2 etapas para isso, não 3:

ren "{filepath}\*.jpg" *.
ren "{filepath}\*" *c.jpg

0

Recursivamente através de subpastas

#!/bin/bash
# Warning: globstar excludes hidden directories.
# Turn on recursive globbing (in this script) or exit if the option is not supported:
shopt -s globstar || exit
for f in **
do
if [ -f "$f" ]; then
   extn=${f##*.} # save the extension of the file
   #mv "$f" "${f%.*}"_suffix.${extn};
   mv "$f" "${f%.*} version 1".${extn};
fi
done
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.