[Guida Passo dopo Passo] Trovare file duplicati con PowerShell

Scoprirai come usare PowerShell per trovare file duplicati e come eliminarli. Inoltre, ti presentiamo un programma per eliminare file duplicati in modo semplice e sicuro, senza dover utilizzare comandi complicati.

Aira

Pubblicato da Aira / Aggiornato il 28.07.2025

Condividi: instagram reddit

Posso usare PowerShell per trovare file duplicati su un computer Windows?

PowerShell è una shell da riga di comando e un linguaggio di scripting creato per automatizzare attività amministrative, gestire configurazioni di sistema e gestire vari processi correlati al sistema. È basato sul framework .NET, che gli consente di accedere a numerose funzioni e librerie di sistema, rendendolo uno strumento indispensabile per molti utenti.

Una delle sue caratteristiche principali è la capacità di interagire con il sistema operativo Windows, i servizi e le applicazioni tramite comandi. Questi comandi sono progettati per essere facili da usare, con una nomenclatura coerente.

La versatilità ed estensibilità di PowerShell lo rendono uno strumento utile per trovare ed eliminare file duplicati su un PC Windows. Con pochi comandi e script, puoi analizzare il sistema, individuare duplicati in base a contenuto, nome o dimensione ed eliminarli per liberare spazio prezioso.

Trovare file duplicati con PowerShell

In questa sezione ti forniamo una guida passo dopo passo su come trovare e rimuovere file duplicati con PowerShell, illustrando gli script da utilizzare.

⚠️ Attenzione: digitare comandi sbagliati può causare la perdita di dati o altri problemi irreversibili. Assicurati di inserire i comandi corretti.

Fase 1: Usare il cmdlet Get-FileHash per individuare i duplicati

Il cmdlet Get-FileHash in PowerShell serve per calcolare l'hash di un file. Questo valore può identificare univocamente un file. Usiamo l'hash per trovare file duplicati.

Get-FileHash -Path file_path -Algorithm hashing_algorithm

È necessario digitare un percorso di archiviazione specifico per i file che si desidera cercare. Ad esempio: Get-FileHash -Path 'D:\ISO\WinPE.iso' -Algorithm SHA512

Check duplicate files

Se non viene specificato l’algoritmo, il predefinito è SHA256. È utile per verificare l’integrità dei file, soprattutto quelli scaricati da Internet.

Get-FileHash supporta l’input tramite pipeline, quindi può essere usato insieme a Get-ChildItem per calcolare l’hash di ogni file trovato.

Ora vediamo come trovare i file duplicati.

Opzione 1: Trovare file duplicati con hash

Il comando seguente ottiene ricorsivamente tutti i file in una cartella, li passa a Get-FileHash per generare il loro hash e quindi li raggruppa in base ai valori hash corrispondenti. È necessario sostituire il percorso in base al risultato del cmdlet Get-FileHash, a seconda della situazione.

$srcDir = "D:\MyScripts" (Qui, modifica il percorso in base al tuo caso)
Get-ChildItem $srcDir -File -Recurse `
    | Get-FileHash | Group -Property Hash `
    | where {$_.Count -gt 1} | foreach { $_.Group | select Path, Hash}

Find duplicate files via PowerShell

Tieni presente che questo comando funziona al meglio con file di piccole dimensioni. Potresti riscontrare difficoltà se la directory di origine contiene un numero significativo di file di grandi dimensioni da eliminare.

Il calcolo dell'hash è un'operazione che richiede tempo, e lo script sopra descritto lo esegue su ogni file, indipendentemente dalla sua dimensione. Se applicato a una cartella che contiene un numero elevato di file, il processo per individuare i duplicati potrebbe richiedere moltissimo tempo.

Opzione 2: Trovare file duplicati con dimensione e hash

Rispetto al comando precedente, cercare i file duplicati in base alla dimensione e all'hash è un metodo più ottimizzato.

Affinché due file siano considerati duplicati, devono avere la stessa dimensione; ciò significa che file con dimensioni diverse non possono essere duplicati. Probabilmente conosci già la proprietà Length del cmdlet PowerShell Get-ChildItem. Non è necessario alcun calcolo, poiché il valore della lunghezza viene preso direttamente dalla directory.

Il trucco consiste nel calcolare l’hash solo per i file con la stessa dimensione, dato che sappiamo già che file di dimensioni diverse non possono essere duplicati. In questo modo, il tempo complessivo richiesto dal comando si riduce notevolmente. Ricorda di sostituire il percorso in base al risultato del tuo cmdlet Get-FileHash, secondo la tua situazione.

$srcDir = "D:\ISO Files" (Qui, modifica il percorso in base al tuo caso)
Get-ChildItem -Path $srcDir -File -Recurse | Group -Property Length `
    | where { $_.Count -gt 1 } | select -ExpandProperty Group | Get-FileHash `
    | Group -Property Hash | where { $_.count -gt 1 }| foreach { $_.Group | select Path, Hash }

PowerShell find duplicate files 2

Come puoi vedere, questo comando raggruppa i file che hanno la stessa dimensione e poi li invia a Get-FileHash per determinarne l’hash.

Fase 2. Eliminare i file duplicati con PowerShell

Dopo aver trovato i file duplicati con PowerShell, è importante gestirli in modo adeguato. Non è consigliabile eliminare immediatamente i duplicati se stai lavorando con file importanti. In alternativa, puoi spostarli in un'altra directory, preferibilmente su un disco separato con spazio sufficiente. Con il nostro nuovo comando, questo passaggio è molto semplice: è sufficiente passare l'output dell’operazione precedente al cmdlet Move-Item.

# Define source directory
$srcDir = "D:\ISO Files"  (Modifica il percorso in base al tuo caso)
# Define destination directory
$targetDir = "E:\DuplicateFiles\$(Get-Date -Format 'yyyyMMdd')" (Qui verranno memorizzati i file duplicati)
# Create destination directory
if(!(Test-Path -PathType Container $targetDir)){ New-Item -ItemType Directory -Path $targetDir | Out-Null }
# Move duplicate files to a different location
Get-ChildItem -Path $srcDir -File -Recurse | group -Property Length | where { $_.Count -gt 1 } `
        | select -ExpandProperty Group | Get-FileHash | group -Property Hash `
        | where { $_.Count -gt 1 }| foreach { $_.Group | select -Skip 1 } `
        | Move-Item -Destination $targetDir -Force -Verbose

Move duplciate files via PowerShell

Un dettaglio importante da notare è l’uso del parametro -Skip 1, che serve per lasciare una copia originale nella directory di origine, mentre gli altri duplicati vengono spostati nella directory di destinazione. Una volta spostati, potrai rivederli manualmente ed eliminarli, se necessario. Se stai lavorando su una directory con milioni di file, è consigliabile evitare il parametro -Verbose per migliorare le prestazioni.

Se la tua directory contiene solo pochi file, potresti preferire scegliere manualmente quali duplicati spostare e quali lasciare:

# Define source directory
$srcDir = "D:\ISO Files"
# Define destination directory
$targetDir = "E:\DuplicateFiles\$(Get-Date -Format 'yyyyMMdd')"
# Create destination directory
if(!(Test-Path -PathType Container $targetDir)){ New-Item -ItemType Directory -Path $targetDir | Out-Null }
# Manually choose duplicate files to move to target directory
Get-ChildItem -Path $srcDir -File -Recurse | Group -Property Length `
    | where { $_.Count -gt 1 } | select -ExpandProperty Group | Get-FileHash `
    | Group -Property Hash | where { $_.count -gt 1 } | foreach { $_.Group | select Path, Hash } `
    | Out-GridView -Title "Select the file(s) to move to `"$targetDir`" directory." -PassThru `
    | Move-Item -Destination $targetDir -Force -Verbose

Remove duplicate files

Se hai già eseguito un backup dei tuoi file, puoi anche decidere di eliminare direttamente i file duplicati con PowerShell:

# Define source directory
$srcDir = "D:\ISO Files"
# Permanently delete duplicate files; use with caution
Get-ChildItem -Path $srcDir -File -Recurse | group -Property Length | where { $_.Count -gt 1 } `
        | select -ExpandProperty Group | Get-FileHash | group -Property Hash `
        | where { $_.Count -gt 1 }| foreach { $_.Group | select -Skip 1 } `
        | Remove-Item -Force -Verbose

Manually remove files PowerShell

Un programma per eliminare file duplicati in modo semplice e sicuro

Anche se è possibile trovare ed eliminare file duplicati usando PowerShell, i suoi comandi possono risultare complessi e rischiosi. Un solo errore potrebbe compromettere l’intera struttura dei file.

In questi casi, uno strumento semplice e sicuro per eliminare file duplicati diventa fondamentale. È per questo che consigliamo AOMEI Partition Assistant for Cleanup, una soluzione completa e compatibile con tutti i PC Windows.

La funzione "Trova File Duplicati" permette di scansionare rapidamente immagini, video, documenti, audio e archivi duplicati, senza dover usare comandi complicati.

AOMEI Partition Assistant for Cleanup

Il miglior gestore di partizioni per Windows e ottimizzatore PC

Passaggio 1. Avvia la funzione Trova file duplicati. Installa e avvia AOMEI Partition Assistant for Cleanup. Clicca sulla scheda "Trova file duplicati".

Trova file duplicati

Passaggio 2. Seleziona un percorso per la scansione dei file duplicati. Puoi cliccare su "Scansione ora" per avviare la scansione dell’unità di sistema C:, oppure cliccare su "Scansione personalizzata" per selezionare manualmente i percorsi da scansionare. (Qui prendiamo come esempio "Scansione personalizzata".)

Scansione personalizzata

Passaggio 3. Dopo aver cliccato su "Scansione personalizzata", verranno mostrati tutti i dischi locali ed esterni presenti sul tuo PC. Puoi anche cliccare sul pulsante "Aggiungi percorso", e si aprirà una finestra per la selezione delle cartelle. In questo modo potrai aggiungere altri percorsi su questo PC, come Desktop, Download e altre cartelle.

Aggiungi percorso

Passaggio 4. Una volta aggiunti i percorsi necessari, clicca sul pulsante "Scansione ora" per iniziare il processo di scansione.

Scansione ora

Passaggio 5. Il processo di scansione potrebbe richiedere del tempo. Al termine della scansione, tutti i file duplicati verranno elencati. Puoi cliccare sul pulsante accanto per localizzarli.

Individuare i file duplicati

Passaggio 6. Seleziona i file duplicati da eliminare. Puoi selezionarli manualmente oppure cliccare sul pulsante "Selezione Smart" per selezionare automaticamente i file duplicati inutili da eliminare.

Suggerimento: se l’opzione "Selezione Smart" è attivata, solo il file duplicato più vecchio non verrà selezionato. Significa che tutti i file duplicati, tranne quello più vecchio, verranno selezionati per l’eliminazione. (Il file più vecchio è quello creato per primo. Questo file non verrà eliminato. Tutti gli altri file duplicati sono considerati copie di quello più vecchio.)

Selezione Smart

Se selezioni manualmente tutte le copie di un file duplicato, verrà visualizzata una finestra di avviso per conservare almeno una copia del file duplicato. Se desideri comunque eliminare tutte le copie del file duplicato, puoi cliccare su "OK" e tutte le copie verranno selezionate per l’eliminazione.

Avvertimento

Dopo aver selezionato i file duplicati inutili, clicca sul pulsante "Pulisci ora" per avviare l’eliminazione.

Pulisci ora

Passaggio 7. Eliminazione completata. L’eliminazione potrebbe richiedere del tempo. Al termine del processo, i file selezionati verranno eliminati e apparirà una finestra che mostra la quantità totale di dati eliminati.

Pulizia completata

Conclusione

In sintesi, PowerShell è uno strumento molto utile per gli utenti Windows per modificare le impostazioni di sistema. Tuttavia, richiede una conoscenza informatica avanzata per gli utenti comuni. Quindi, se desideri semplicemente eliminare file duplicati, un programma per rimuovere file duplicati è uno strumento altamente sicuro.

Aira
Aira · Redattore
Aira è l'editore tecnico di AOMEI, principalmente responsabile di AOMEI Partition Assistant. Le piace aiutare gli utenti con domande su gestione dei dischi rigidi & partizioni, backup & ripristino e così via. Ha scritto molti articoli su AOMEI Partition Assistant. Nel tempo libero ama fare sport e guardare film. Come un redattore professionale di AOMEI. Aira sarà felice di aiutarti.