24711 Letture

Come rinominare una serie di file con Powershell

L'esigenza di dover rinominare gruppi di file è piuttosto frequente. Spesso può essere necessario eliminare del testo presente nel nome di una serie di file oppure aggiungere un prefisso o un suffisso.

Per rinominare file in blocco sono oggi disponibili diversi strumenti software ma perché installare un programma apposito se Windows già integra tutto il necessario per procedere?

Già anni fa, nell'articolo Rinominare file e cartelle in Windows senza usare altri software, abbiamo visto com'è possibile cambiare il nome ad una serie di file assegnando la stessa denominazione di base e un numero progressivo.
L'interfaccia di Windows (Esplora file) e il prompt dei comandi permettono infatti di rinominare file in blocco aggiungendo il suffisso numerico incrementale (1), (2), (3) e così via.
Nel caso di Esplora file basta selezionare gli elementi da rinominare (CTRL+A per sceglierli tutti), quindi cambiare il nome al primo file premendo il tasto F2 o il pulsante Rinomina.

Dal tradizionale prompt dei comandi si possono effettuare alcune modifiche in più ma nulla di lontanamente paragonabile a quanto è possibile fare ricorrendo a PowerShell.


PowerShell è una shell caratterizzata da un'interfaccia a riga di comando e da un versatile linguaggio di scripting che permette di eseguire ogni genere di operazione, anche quelle apparentemente più complesse.

Come avviare PowerShell

Per accedere a PowerShell, è sufficiente premere la combinazione di tasti Windows+X quindi scegliere la voce Windows PowerShell.


In Windows 10 se si vedesse ancora Prompt dei comandi all'interno del menu, basterà digitare Sostituisci il prompt dei comandi con Windows PowerShell nella casella di ricerca del menu Start e attivare l'opzione Sostituisci il prompt dei comandi con Windows PowerShell quando si fa clic con il pulsante destro del mouse nell'angolo inferiore sinistro o si premere il tasto Windows+X.


Per rinominare file in blocco non sono di norma necessari i diritti di amministratore; se tuttavia si stesse operando su file altrui (ad esempio quelli memorizzati nelle cartelle di un altro account utente) bisognerà necessariamente avviare e usare Powershell assegnandogli privilegi maggiori (Windows PowerShell, amministratore).

Per aprire PowerShell e portarsi subito nella cartella aperta in Esplora file, suggeriamo di tenere premuto il tasto MAIUSC quindi cliccare con il tasto destro del mouse in un'area libera della cartella scegliendo infine Apri finestra PowerShell qui.


Rinominare una serie di file rimuovendo alcuni caratteri

Prima di iniziare a lavorare con Powershell, suggeriamo di creare una copia di backup dei file che saranno rinominati. Nel caso in cui si dovessero commettere errori, si potranno così agevolmente ripristinare le copie originali dei file, con i nomi iniziali.

Dalla finestra di Powershell, usando il comando cd ci si potrà portare nella cartella contenente i file da rinominare (esempio: cd C:\Users\Michele\Documents\test).
Si possono anche usare le variabili d'ambiente: %userprofile% in PowerShell diventa $env:userprofile.
Esempio: cd $env:userprofile\Documents

Per rinominare una serie di file sostituendo un carattere o una sequenza di caratteri, si potrà quindi digitare quanto segue:

dir | rename-item -newname { $_.name -replace "stringa_da_cercare","stringa da sostituire" }

Come rinominare una serie di file con Powershell

Nell'esempio in figura, rimuoviamo la stringa Diapositiva1 dai nomi di tutti i file presenti nella cartella corrente.

L'istruzione seguente, invece, permette di rinominare - effettuando la sostituzione specificata - solo quei file che contengono il termine indicato in qualunque parte del nome:


Get-ChildItem -Filter "*termine*" -Recurse rename-item -newname { $_.name -replace "stringa_da_cercare","stringa da sostituire" }

Esempio:
Get-ChildItem -Filter "*sesamo*" -Recurse rename-item -newname { $_.name -replace "TEST_","OK_" }
Sostituisce la stringa TEST_ con OK_ solo per quei file che - in qualunque parte del loro nome - contengono il termine "sesamo".

Aggiungere un prefisso o un suffisso al nome dei file

Se si volesse invece rinominare una serie di file e aggiungervi un prefisso, basterà digitare quanto segue:

dir | Rename-Item -NewName {"PREFISSO_" + $_.Name}

Nel caso in cui si volesse aggiungere invece un suffisso basterà, banalmente, usare:

dir | Rename-Item -NewName {$_.Name + "_SUFFISSO"}

Si possono anche combinare altre informazioni. Ad esempio, l'istruzione che segue aggiunge come prefisso il nome della cartella a quello di tutti i file in essa memorizzati:

dir | Rename-Item -NewName {$_.Directory.Name + "_" + $_.Name}


Cambiare l'estensione di un insieme di file

Analogamente, per rinominare un insieme di file modificandone l'estensione, si potrà usare quanto segue:

Get-ChildItem *.txt | rename-item -newname { $_.name -replace '\.txt','.log' }

In questo caso, tutti i file con estensione .txt verranno automaticamente rinominati ricorrendo all'estensione .log.

Rinominare file in blocco e assegnare un numero progressivo a ciascuno di essi

Per rinominare file in sequenza e fare in modo che PowerShell aggiunga al loro nome un numero progressivo, suggeriamo di digitare al prompt quanto segue:


$nr=1
dir | %{Rename-Item $_ -NewName ("FOTO_{0}.jpg" -f $nr++)}


Alla variabile $nr si dovrà assegnare il numero dal quale deve partire il contatore. Ad esempio, scrivendo $nr=9, al primo file rinominato verrà attribuito il nome FOTO_9.jpg, al secondo FOTO_10.jpg e così via.

È interessante evidenziare che dalla finestra di Powershell è comunque possibile usare buona parte dei comandi che si era abituati a usare dal prompt classico (cmd).
Per chiudere la finestra di Powershell, basta digitare il comando exit.

  1. Avatar
    grmail1
    25/04/2018 17.33.38
    Spero di aver individuato la discussione giusta :)
    Ho necessità di rinominare in modo massivo qualche centinaia di file. Ho visionato e provato alcuni programmi: Advanced Renamer, Lupas Renamer e Renamer, senza riuscire a fare quanto segue.

    Ho delle stringhe come la seguente
    COGNOME_MIUR.AOODR.Reg_reg_dei_decreti_direttoriali.1111.31-08-2017.pdf
    e voglio trasformarla in
    CODICEFISCALE-COGNOME_1111.31-08-2017.pdf

    La rinomina in senso stretto e l'accorciamento non è un problema con i programmi di cui sopra, ma l'inserimento del CF si (almeno per me) perché si tratta di prendere i CF e i cognomi da un file xls o cvs (o ev. txt).

    Insomma, ciò di cui ho bisogno è una sorta di "fusione di stampa" che verificato il cognome (nel nome file con il cognome nel file xls/cvs), agganci nel file xls/cvs il codice fiscale corrispondente al nome, aggiungendolo in testa al nome del file.

    Fantascienza ... o realtà? ;)

    Giovanni
  2. Avatar
    Sampei Nihira
    25/05/2016 18.18.50
    Già che siamo in argomento....
    Avete fatto caso che in pc x64 ci sono 4 exe Powershell ?

    Vado avanti.
    In Powershell il comando:

    Get-ExecutionPolicy

    restituisce la voce "Unrestricted"

    in Powershell (x86) lo stesso comando restituisce "Restricted"

    Un quadro completo si ha inserendo il valore -list al comando sopra.
Come rinominare una serie di file con Powershell - IlSoftware.it