Posted in: Windows 10, Windows 11, Windows 8 a 8.1, Windows server, Základy PowerShellu

Primitivní mazání duplicitních souborů Powershellem

Dnes si ukážeme, jak využít PowerShell verze 5.1 (předinstalovaný na Windows 10) nebo verze 7.x pro smazání duplicitních (mám na mysli obsahově duplicitních v rámci stejného formátu) souborů z daného adresáře a jeho podadresářů. Tento problém zcela jistě sousta z Vás řeší při nějakém tom úklidu PC.
Kód skriptu (klině lze po řádkách vkládat do konzole) je následující:

$WorkDirectory = Read-Host -Prompt „Zadejte cestu k adresáři, který chcete zbavit duplicitnich souboru:“
$OutputDirectory = Read-Host -Prompt „Zadejte cestu k adresáři pro umisteni vysledku: „
#vypíše soubory a jejich sha512 do csv
Get-ChildItem -Path $WorkDirectory -Recurse -ErrorAction SilentlyContinue | Get-FileHash -Algorithm SHA512 | select Path, Hash | Export-Csv -Path „$OutputDirectory\All_Files.csv“ -Delimiter ‚;‘ -Encoding UTF8 -NoTypeInformation
#načte si csv s informacemi o souborech
$soubor = Import-Csv -Path „$OutputDirectory\All_Files.csv“ -Delimiter „;“
#identifikuje SHA512, které jsou v informačním csv více jak 1x
$duplikat = ($soubor.hash | Group-Object | Where-Object -FilterScript {$_.count -gt 1}).values
#na základě SHA512 identifikuje soubory, které jsou v prohledávaném adresáři a jeho podadresářích více jak 1x
$vystup = ($soubor | ForEach-Object {if($_.hash -in $duplikat) {$_}}) | Sort-Object -Property Hash
#najde od každého vícenásobného souboru „originál“
$vystup2 = ($soubor | ForEach-Object {if($_.hash -in $duplikat) {$_}}) | Sort-Object -Property Hash -Unique
#smaže všechny výskyty vícenásobných souborů vyjímaje originálů
(($vystup | ForEach-Object {if($_ -notin $vystup2) {$_}}) | Sort-Object -Property Hash).Path | Remove-Item -force

# O něco chytřejší funkci PowerShellu, která umí uklízet ještě lépe si představíme někdy příště.

Back to Top