Aggiungi testo alla fine del nome file (ma prima dell'estensione) utilizzando il file batch


18

Ho un elenco di file che sono nel formato a sinistra. Voglio aggiungere una stringa a ciascun nome di file, ma prima dell'estensione, come mostrato:

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
...

In ogni caso, la stringa aggiunta è la stessa in tutti i file.

Sembra un compito così semplice, ma ho qualche problema a inserirlo in un file batch.

Ho provato il rencomando e ho seguito alcuni degli esempi in questa pagina , ma i nomi di file risultanti aggiungono la stringa dopo l'estensione:

File 1.txt version 1.txt

Le informazioni sul link "questa pagina" di SS64 provengono da questo SU Domande e risposte (con la mia benedizione): in che modo il comando Windows RENAME interpreta i caratteri jolly? Mantengo la risposta SU (raramente) mentre scopro nuove funzionalità.
dbenham,

Risposte:


6

per nomi di file più lunghi dovrai aggiungerne altri ?nel blocco con la massa di?????????

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

2
Grazie per aver risposto così prontamente! Ho modificato leggermente il comando, per mantenere l'estensione del file e influire solo sui file txt: ren * .txt ?????????????????????????????????? "Versione 1.txt "
TheTurkey,

e se volessi aggiungere qualcosa all'inizio
Farhana Haque,

quanti ? sono necessari personaggi?
Kaveesh Kanwal,

39

Invece di fare affidamento sulle stranezze prive di documenti di ren , perché non farlo nel modo giusto?

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

Se vuoi usarlo in un file batch, ricorda di raddoppiare ogni segno%.


1
Eccellente! questa è una risposta migliore ogni giorno. +1
Fr0zenFir

2

Volevo aggiungere "_A" a più file ed è così che l'ho fatto.

Ho rimosso prima l'estensione, aggiunto il suffisso, quindi ho ripristinato l'estensione in originale. Di sicuro ha funzionato per me e ha mantenuto semplice il codice batch, dato che non sono un programmatore.

@ECHO OFF

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

2

Per le persone che non hanno esperienza con il comando (come me), ci sono un paio di software che rendono molto semplice la rinominazione di massa:

  • Utilità di ridenominazione in blocco (senza open source)
  • Rename-It! (open source)

1

La soluzione di @ bwDraco era buona ma avrebbe potuto essere mantenuta più semplice. Il mio set di file era tutto * .jpg e volevo rinominarli tutti * c.jpg. Per questo sono necessari solo 2 passaggi, non 3:

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

0

Ricorsivamente attraverso le sottocartelle

#!/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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.