Magic Quadrant™ per la gestione degli accessi privilegiati 2025: Netwrix riconosciuta per il quarto anno consecutivo. Scarica il report.

Piattaforma
Centro risorseBlog
Utilizzo del Cmdlet Rename-Item per rinominare i file in PowerShell

Utilizzo del Cmdlet Rename-Item per rinominare i file in PowerShell

Oct 9, 2024

Cos'è il cmdlet Rename-Item?

Il cmdlet Rename-Item in PowerShell può essere utilizzato per cambiare il nome di un elemento. Questo elemento può essere un file, una directory o qualsiasi oggetto in un percorso. Il cmdlet può anche essere utilizzato per rinominare elementi sia localmente che in un ambiente di rete. Gli utenti possono anche eseguire operazioni di rinominazione in batch, integrare compiti di rinominazione in script per l'automazione e persino gestire requisiti di rinominazione complessi con l'aiuto di caratteri jolly e espressioni regolari. Ad esempio, gli utenti possono facilmente cambiare nomi di file ed estensioni o organizzare i file incorporando timestamp o altre informazioni identificative nei loro nomi.

Cmdlet Rename-Item: Sintassi

Di seguito è riportata la sintassi del cmdlet PowerShell Rename-Item e i suoi parametri di supporto, che offrono flessibilità e controllo sul processo di rinominazione.

      Rename-Item -Path <String> -NewName <String> [-Force] [-PassThru] [-WhatIf] [-Confirm] [<CommonParameters>]
      

Di seguito è riportato il cmdlet di base di Rename-Item; questo comando rinomina un file da “Report.txt” a “Report-26-09-2024.txt” nella directory corrente.

      Rename-Item -Path "C:\Temp\Report.txt" -NewName "Report-26-09-2024.txt"
      

Tutorial di Windows PowerShell Scripting (PDF) per Principianti

Scopri di più

Rinomina-Elemento: Parametri

Comprendere i parametri di Rename-Item ti aiuterà ad utilizzare efficacemente il cmdlet per rinominare gli elementi. Di seguito è fornita una spiegazione di tutti i parametri utilizzati con questo cmdlet in PowerShell.

Parametri

Descrizione

-Path

Specifica il percorso dell'elemento da rinominare. Può essere il percorso completo o relativo alla directory corrente. L'elemento nel percorso può essere un file, una cartella o qualsiasi altro tipo che supporti la rinomina. Questo parametro è obbligatorio.

-LiteralPath

Fornisce un'alternativa a -Path. Viene utilizzato per specificare il percorso quando i nomi degli elementi includono caratteri speciali che PowerShell potrebbe interpretare diversamente, come '[' o ']'. A differenza di -Path, i caratteri jolly non sono consentiti e la stringa specificata viene utilizzata esattamente com'è.

-NewName

Questo parametro obbligatorio rappresenta il nuovo nome per l'elemento. È importante notare che questo dovrebbe essere solo il nome dell'elemento, non un percorso. Se stai rinominando un file e desideri mantenere il suo tipo di file, assicurati di includere l'estensione del file appropriata nel nuovo nome.

-Credential

Anche se non comunemente utilizzato negli script per la gestione dei file locali, questo parametro opzionale consente al cmdlet di eseguire utilizzando un insieme di credenziali specificate dall'utente. Questo può essere utile quando si lavora con file su una condivisione di rete o in qualsiasi scenario che richieda permessi specifici.

-Force

Questo parametro consente al cmdlet di rinominare elementi di sola lettura, nascosti o altrimenti protetti. Sovrascrive le restrizioni che generalmente impedirebbero il successo dell'operazione.

-PassThru

Per impostazione predefinita, Rename-Item non restituisce alcun oggetto. Quando si utilizza il parametro -PassThru, il cmdlet restituisce l'oggetto che è stato rinominato. Questo può essere utile per inoltrare l'elemento rinominato ad altri comandi o per una verifica immediata dell'operazione.

-WhatIf

Questa funzione di sicurezza simula l'esecuzione del cmdlet senza eseguire l'operazione di rinominazione. Mostra cosa accadrebbe se il cmdlet venisse eseguito, fornendo un'anteprima dei risultati. Questo può essere particolarmente utile negli script o nelle operazioni batch dove si vuole evitare conseguenze non intenzionali.

-Conferma

Richiede la conferma dell'utente prima di eseguire il cmdlet. Questo può essere utile in script interattivi o quando si apportano modifiche significative, fornendo un ulteriore livello di sicurezza contro azioni non intenzionali.

Esempi di utilizzo di Rename-Item con parametri

Di seguito sono riportati alcuni esempi di Rename-Item con diversi parametri; questi esempi mostreranno come rinominare elementi in varie condizioni, fornendo una comprensione pratica di come applicare il cmdlet in scenari reali.

Di seguito è riportato un esempio base di cmdlet, che rinomina un singolo file da “Design.txt” a “Report.txt”.

      Rename-Item -Path "C:\Backups\Design.txt" -NewName "Report.txt"
      

Il parametro -Force rinomina i file di sola lettura o nascosti, come mostrato nell'esempio sottostante.

      Rename-Item -Path "C:\Backups\Design.txt" -NewName "Report.txt" -Force
      

Il parametro -PassThru restituisce un oggetto che rappresenta l'elemento rinominato, che può poi essere instradato in un altro cmdlet; dopo la rinomina, otteniamo immediatamente tutti i dettagli completi dell'elemento rinominato.

      Rename-Item -Path "C:\Backups\Design.txt" -NewName "Report.txt" -PassThru | Get-Item
      
Image

Per vedere cosa accadrebbe senza eseguire la rinomina, utilizza il parametro -WhatIf. Questo è particolarmente utile per i test negli script. Dopo aver confermato il risultato, esegui il cmdlet senza il parametro -WhatIf per il processo di rinomina effettivo.

      Rename-Item -Path "C:\Backups\Design.txt" -NewName "C:\Backups\NewDesign.txt" -WhatIf
      
Image

L'output descriverà l'azione ma non la eseguirà.

Se vuoi essere richiesto di confermare prima che venga effettuata la rinomina, usa il parametro Confirm. Questo è utile per scenari in cui una rinomina accidentale potrebbe avere conseguenze significative.

      Rename-Item -Path "C:\Backups\Design.txt" -NewName "Report.txt" -Confirm
      

Sarai invitato a confermare l'azione prima che proceda.

Image

Parametri Path vs. LiteralPath

Quando si lavora con cmdlet che coinvolgono operazioni su file e directory, ci si imbatte spesso in due parametri, -Path e -LiteralPath. Comprendere le differenze tra questi due parametri è essenziale per gestire efficacemente i compiti del file system, specialmente quando si ha a che fare con nomi di file o percorsi che includono caratteri speciali o parole riservate.

-Path

-Path è il parametro più comunemente utilizzato per specificare la posizione degli elementi. Supporta il carattere jolly (*), consentendo l'abbinamento di modelli e la selezione di più elementi con un singolo comando. PowerShell interpreta caratteri speciali, inclusi i caratteri jolly. Questo significa che se i nomi dei file o i percorsi includono caratteri come “[],(),{}”, PowerShell potrebbe trattarli come parte di un modello jolly, portando potenzialmente a comportamenti inaspettati.

Esempio

      Rename-Item -Path C:\Logs\*
      

-LiteralPath

-LiteralPath viene utilizzato per specificare la posizione degli elementi senza interpretare alcun carattere come jolly. Puoi inserire questo parametro quando hai a che fare con nomi di file o percorsi che includono caratteri speciali, assicurandoti che PowerShell tratti la stringa di input letteralmente senza tentare di abbinare modelli.

Esempio

      Rename-Item -LiteralPath “C:\Files\[Design].txt”
      

Esempi comuni di utilizzo di Rename-Item

Rinominare e spostare i file

Non è possibile utilizzare il cmdlet Rename-Item per rinominare i file tramite PowerShell e spostarli in una diversa posizione. Riceverai l'errore seguente durante tale operazione.

Image

Devi utilizzare il cmdlet Move Item per spostare il file e rinominare contemporaneamente il nome del file nella destinazione.

Di seguito è illustrato come è possibile utilizzare cmdlet per spostare e rinominare i file.

      Move-Item -Path "C:\Backups\Design.txt" -Destination "C:\Archive\NewDesign.txt"
      

Rinomina file nascosti e di sola lettura

Per rinominare un file nascosto o di sola lettura, utilizzare il parametro -Force con il cmdlet Rename-Item. Questo parametro permette a PowerShell di ignorare l'attributo di sola lettura durante il processo di rinominazione.

      Rename-Item -Path "C:\Documents\ReadOnlyFile.txt" -NewName "RenamedFile.txt" -Force
      

Rinomina file in batch

Rinominare file in batch utilizzando PowerShell è un'attività comune quando si gestiscono grandi set di dati, si organizzano archivi o semplicemente si puliscono le directory.

Se devi cambiare l'estensione di più file, ad esempio da “.txt” a “.log”, puoi utilizzare lo script seguente.

      Get-ChildItem -Path "C:\Documents" -Filter "*.txt" | ForEach-Object {

    $newName = [io.path]::ChangeExtension($_.Name, ".log")

    Rename-Item -Path $_.FullName -NewName $newName

}
      

Oppure puoi utilizzare il cmdlet di PowerShell per rinominare più file ed estensioni di file qui sotto senza aggiungere un ciclo per ogni file.

      Get-ChildItem -Path "C:\Documents\*.txt" | Rename-Item -NewName { $_.Name -replace ".txt",".log" }
      

Aggiungendo prefissi e suffissi

Utilizzando il comando di PowerShell per rinominare tutti i file in una directory, è possibile aggiungere prefissi o suffissi ai nomi dei file. Questo è un compito comune quando si organizzano file, si versionano documenti o si preparano dati per l'archiviazione. Utilizzando PowerShell, puoi usare i cmdlet Get-ChildItem e Rename-Item per aggiungere prefissi e suffissi a tal fine.

Puoi utilizzare lo script seguente per aggiungere un prefisso a tutti i file in una specifica directory.

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    Rename-Item -Path $_.FullName -NewName ("Project_" + $_.Name)

}
      

Allo stesso modo, puoi usare lo script qui sotto per aggiungere un suffisso prima dell'estensione del file.

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    Rename-Item -Path $_.FullName -NewName ($_.BaseName + "_Final" + $_.Extension)

}
      

Aggiungi il prefisso “Backup_” e il suffisso “_2024” a tutti i file .txt.

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    Rename-Item -Path $_.FullName -NewName ("Backup_" + $_.BaseName + "_2024" + $_.Extension)

}
      

Rinomina file con timestamp

Rinominare i file per includere i timestamp può essere incredibilmente utile per creare backup, organizzare archivi o tracciare le versioni dei file.

Questo esempio mostra come aggiungere un timestamp nel formato “yyyyMMdd_HHmmss” come suffisso a tutti i file “.txt” in una specifica directory.

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    $timestamp = Get-Date -Format "yyyyMMdd_HHmmss"

    $newName = $_.BaseName + "_" + $timestamp + $_.Extension

    Rename-Item -Path $_.FullName -NewName $newName

}
      

Se preferisci il timestamp all'inizio del nome del file, puoi modificare leggermente lo script come segue.

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    $timestamp = Get-Date -Format "yyyyMMdd_HHmmss"

    $newName = $timestamp + "_" + $_.Name

    Rename-Item -Path $_.FullName -NewName $newName

}
      

Se vuoi rinominare tutti i file .txt nella directory C:\Documents, aggiungi il timestamp di creazione all'inizio.

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    $timestamp = $_.CreationTime.ToString("yyyyMMdd_HHmmss")

    Rename-Item -Path $_.FullName -NewName ("$timestamp" + "_" + $_.Name)

}
      

Se vuoi aggiungere il timestamp di modifica come suffisso a tutti i file .txt.

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    $timestamp = $_.LastWriteTime.ToString("yyyyMMdd_HHmmss")

    Rename-Item -Path $_.FullName -NewName ($_.BaseName + "_" + $timestamp + $_.Extension)

}
      

Se vuoi aggiungere il timestamp di creazione come prefisso e il timestamp dell'ultima modifica come suffisso per tutti i file .docx.

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    $creationTimestamp = $_.CreationTime.ToString("yyyyMMdd_HHmmss")

    $modifiedTimestamp = $_.LastWriteTime.ToString("yyyyMMdd_HHmmss")

    Rename-Item -Path $_.FullName -NewName ("$creationTimestamp" + "_" + $_.BaseName + "_$modifiedTimestamp" + $_.Extension)

}
      

Gestione delle collisioni dei nomi dei file

Gestire le collisioni di nomi di file è importante quando si automatizzano operazioni sui file, come rinominare o spostare file, per evitare di sovrascrivere involontariamente file esistenti. È possibile verificare se un file con il nuovo nome esiste già. Se esiste, è possibile modificare il nuovo nome (ad esempio, aggiungendo un contatore o un timestamp aggiuntivo).

Esempio: Aggiungi un contatore e una data di creazione per le collisioni

      Get-ChildItem -Path "C:\Documents\*.txt" | ForEach-Object {

    $baseName = $_.BaseName

    $extension = $_.Extension

    $creationTimestamp = $_.CreationTime.ToString("yyyyMMdd_HHmmss")

    $newName = "$baseName" + "_$creationTimestamp" + "$extension"

    # Initialize a counter for collisions

    $counter = 1

    # Check if the new name already exists

    while (Test-Path -Path (Join-Path -Path $_.DirectoryName -ChildPath $newName)) {

        $newName = "$baseName" + "_$creationTimestamp" + "_$counter" + "$extension"

        $counter++

    }

    Rename-Item -Path $_.FullName -NewName $newName

}
      

Spiegazione

Lo script sopra recupera tutti i file .txt. Costruisce un nuovo nome con un timestamp come data di creazione del file, poi verifica se il nuovo nome esiste già. Se esiste, aggiunge un contatore, ad esempio, “_1”, “_2”, ecc. fino a quando non viene trovato un nome univoco.

Rinomina chiavi di registro

Per rinominare una chiave di registro utilizzando PowerShell, puoi usare il cmdlet Rename-Item ed esportare la chiave che intendi rinominare prima di tentare di eseguire il cmdlet. Questo è un passo precauzionale per assicurarsi un backup in caso qualcosa vada storto.

      Rename-Item -Path "HKLM:\Software\MyCompany\Advertising" -NewName "Marketing"
      

Guida completa all'amministrazione di Microsoft 365: Tutorial

Scopri di più

Utilizza Espressioni Regolari per Rinominazioni Complesse

Comando PowerShell per rinominare i file in una cartella

L'utilizzo dell'operatore -replace è un modo potente per rinominare i file in una cartella, applicando modelli di espressione regolare (regex). Questo approccio può essere vantaggioso per operazioni di rinominazione in massa dove è necessario aggiungere, rimuovere o modificare parti dei nomi di file o directory in base a schemi specifici.

Ad esempio, hai un gruppo di file nominati come “report1_2023-04-01.txt”, “report2_2023-04-02.txt”, ecc., e vuoi rimuovere le date dai loro nomi insieme al trattino basso (_).

Il comando sottostante trova tutti i file .txt i cui nomi iniziano con “report*” seguiti da una data e li rinomina rimuovendo la data, lasciando solo “report.txt” mantenendo il numero intatto, ad esempio, “report1.txt”, “report2.txt”.

      Get-ChildItem -Path "C:\Backups"-Filter "report*.txt" | Rename-Item -NewName {$_.Name -replace '_\d{4}-\d{2}-\d{2}', ''}
      

Numerazione sequenziale

Aggiungere la numerazione sequenziale ai nomi dei file utilizzando il cmdlet Rename-Item richiede un po' di scripting per implementare un contatore durante l'iterazione dei file. Questo può essere particolarmente utile per organizzare i file in un ordine specifico o per garantirne l'unicità.

Se vuoi rinominare i file per includere numeri sequenziali (ad esempio, “Image_1.jpg”, “Image_2.jpg”), puoi utilizzare lo script qui sotto.

      $counter = 1

Get-ChildItem -Path "C:\Images" -Filter "*.jpg" | ForEach-Object {

    Rename-Item -Path $_.FullName -NewName ("Image_$counter.jpg")

    $counter++

}
      

Contenuti correlati selezionati:

Errori comuni e risoluzione dei problemi di Rename-Item

Potresti incontrare alcuni errori comuni o problemi quando lavori in PowerShell per rinominare file, directory e chiavi di registro. Comprendere queste potenziali insidie e come risolverle può aiutare a garantire che le tue attività di rinominazione di file e directory procedano senza intoppi. Di seguito sono riportati alcuni errori comuni e consigli per la risoluzione dei problemi.

Errore File Non Trovato

PowerShell non ha trovato il percorso perché non esiste. Controlla il percorso del file per errori di battitura. Usa il cmdlet Test-Path per verificare se il file esiste prima di tentare di rinominarlo.

      if (Test-Path "C:\Backups\design.txt") {

    Rename-Item -Path "C:\Backups\Design.txt" -NewName "NewDesign.txt"

} else {

    Write-Host "File does not exist."

}
      

File in uso

Il cmdlet non può accedere al file perché è in uso da un altro processo. Questo errore si verifica se il file che si sta tentando di rinominare è aperto in un'altra applicazione. Chiudere il file in qualsiasi altra applicazione che potrebbe utilizzarlo. Se il problema persiste, potrebbe essere necessario terminare i processi che hanno bloccato il file o riavviare il sistema affinché il file venga sbloccato.

Errore di Accesso Negato

L'accesso al percorso è negato o non si dispone dei permessi sufficienti per modificare il file o la chiave di registro.

Per evitare questo errore, esegui PowerShell come amministratore o controlla i permessi del file o della chiave e regolali se necessario.

Errore Percorso Troppo Lungo

Il percorso specificato, il nome del file o entrambi sono troppo lunghi. Windows ha un limite massimo di lunghezza del percorso (tipicamente 260 caratteri). Accorcia il percorso spostando i file in un livello di directory superiore.

Errore: la destinazione esiste già

Non può essere rinominato perché la destinazione esiste già. Il nuovo nome del file esiste già nella directory di destinazione. Verifica se il file di destinazione esiste usando Test-Path. Modifica lo script per gestire i conflitti, come aggiungere un suffisso o incrementare un numero.

Errore di caratteri non validi

Il nome del file, della directory o del registro non è corretto. Il nuovo nome del file contiene caratteri non validi. Assicurati che il nuovo nome non includa caratteri non validi. Utilizza regex per rimuovere o sostituire i caratteri non validi prima di rinominare.

Conclusione

È possibile utilizzare il comando Rename-Item in PowerShell per cambiare il nome di un file, directory o altro elemento nel file system. Questo comando non modifica l'elemento in sé, ma solo il suo nome. Puoi usarlo in PowerShell per rinominare gli elementi specificando il percorso attuale e il nuovo nome. Il comando offre anche opzioni per forzare l'operazione, mostrare cosa accadrebbe senza effettivamente rinominare l'elemento e chiedere conferma prima di rinominare. Questo comando è utile per automatizzare compiti di gestione di file e directory, ad esempio, aggiungendo prefissi, suffissi e numerazione sequenziale ai file.

Netwrix Directory Manager

FAQ

Cos'è il cmdlet Rename-Item in PowerShell?

Il cmdlet Rename-Item viene utilizzato per rinominare elementi tramite PowerShell, ad esempio file o chiavi di registro. Dispone di molti parametri supportati, ad es. -Path, -Force, -WhatIf, -Confirm o -Passthru da utilizzare in diversi scenari.

Posso spostare un file e rinominarlo contemporaneamente con Rename-Item?

No, i file non possono essere spostati e rinominati simultaneamente usando Rename-Item. Devi usare Move-Item per spostare prima il file e specificare la destinazione con un nuovo nome del file.

Condividi su

Scopri di più

Informazioni sull'autore

Asset Not Found

Kevin Horvatin

Lead Software Architect

Kevin Horvatin è Lead Software Architect presso Netwrix ed è responsabile per Netwrix Privilege Secure. Sviluppatore software da oltre 20 anni, lavora con PowerShell e C# da quando sono stati introdotti.