Ma ilyen AI-s napom van. Egyre jobban tör be a mindennapi munkámba, és úgy tűnik, hogy a hétvégeimet is ez teszi ki. Miért? Kérdezheted joggal. Megmondom. Az IT-ban, de gyanítom a többi szakmában is jobb, ha értünk hozzá, és megtanuljuk rutinosan használni, mintsem lemaradjunk róla, és nézzük bambán, ahogy az élet felsuhan előttünk.
Nézzük, mire is mentem elsőre.
Az alábbi PowerShell-script végigpásztázza a megadott mappát (és annak almappáit), a fájlok SHA256 hash értéke alapján azonosítja a duplikációkat, majd az eredményt kiírja a képernyőre és elmenti egy CSV-fájlba.
PowerShell duplikáció-kereső script
Hozz létre egy find-duplicates.ps1 fájlt, és másold bele az alábbi kódot:
PowerShell
# --- BEÁLLÍTÁSOK ---
$TargetFolder = "C:\Elérési\Út\A\Mappához" # Cseréld ki a vizsgálandó mappa útvonalára
$OutputFile = "C:\Elérési\Út\duplikatumok.csv" # Ide menti az eredményt
Write-Host "Fájlok indexelése és hash értékek számítása..." -ForegroundColor Cyan
# 1. Összes fájl lekérése és méret szerinti csoportosítása (gyorsítási lépés)
$fileGroups = Get-ChildItem -Path $TargetFolder -Recurse -File -ErrorAction SilentlyContinue |
Group-Group-Object -Property Length |
Where-Object { $_.Count -gt 1 }
$duplicates = @()
$totalGroups = $fileGroups.Count
$counter = 0
# 2. Csak az azonos méretű fájlok SHA256 hash-ének ellenőrzése
foreach ($group in $fileGroups) {
$counter++
Write-Progress -Activity "Duplikátumok keresése" -Status "Fájlcsoportok feldolgozása: $counter / $totalGroups" -PercentComplete (($counter / $totalGroups) * 100)
$hashTable = $group.Group | Get-FileHash -Algorithm SHA256 | Group-Object -Property Hash | Where-Object { $_.Count -gt 1 }
foreach ($hashGroup in $hashTable) {
foreach ($file in $hashGroup.Group) {
$duplicates += [PSCustomObject]@{
Hash = $hashGroup.Name
Path = $file.Path
SizeMB = [math]::Round((Get-Item $file.Path).Length / 1MB, 2)
}
}
}
}
# 3. Eredmények megjelenítése és mentése
if ($duplicates.Count -gt 0) {
Write-Host "`nTalált duplikátumok:" -ForegroundColor Green
$duplicates | Format-Table -AutoSize -Property Hash, SizeMB, Path
$duplicates | Export-Csv -Path $OutputFile -NoTypeInformation -Encoding UTF8
Write-Host "Az eredmények elmentve ide: $OutputFile" -ForegroundColor Yellow
} else {
Write-Host "`nNem találhatók duplikált fájlok." -ForegroundColor Green
}
Így használd:
- Nyisd meg a PowerShell-t (akár Rendszergazdaként, ha védett mappákat is vizsgálsz).
- Írd át a
$TargetFolderváltozót a keresni kívánt mappára. - Futtasd a scriptet:PowerShell
.\find-duplicates.ps1
Megjegyzés: Ha a PowerShell letiltja a scriptek futtatását, futtasd ezt a parancsot a munkamenetben:
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
Majd második próbálkozásra
Módosítottam a scriptet, hogy a célmappát (és opcióként a kimeneti CSV-fájl helyét is) paraméterként fogadja el.
A módosított script kódja:
PowerShell
<#
.SYNOPSIS
Fájl duplikációkat kereső és gyűjtő PowerShell script.
.DESCRIPTION
A script végigpásztázza a paraméterként megadott mappát (és annak almappáit),
és az SHA256 hash értékek alapján azonosítja a duplikátumokat.
Az eredményt megjeleníti a konzolon és CSV-fájlba menti.
.PARAMETER TargetFolder
A vizsgálandó mappa útvonala (kötelező paraméter).
.PARAMETER OutputFile
A kimeneti CSV fájl útvonala (opcionális, alapértelmezett: .\duplikatumok.csv).
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $true, Position = 0, HelpMessage = "Kérjük, adja meg a vizsgálandó mappa útvonalát!")]
[ValidateScript({ Test-Path $_ -PathType Container })]
[string]$TargetFolder,
[Parameter(Mandatory = $false, Position = 1)]
[string]$OutputFile = ".\duplikatumok.csv"
)
# Abszolút útvonalak feloldása
$TargetFolder = (Resolve-Path $TargetFolder).Path
$OutputFile = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($OutputFile)
Write-Host "Mappa elemzése: $TargetFolder" -ForegroundColor Cyan
Write-Host "Fájlok indexelése és méret szerinti csoportosítása..." -ForegroundColor Cyan
# 1. Összes fájl lekérése és méret szerinti csoportosítása (gyorsítási lépés)
$fileGroups = Get-ChildItem -Path $TargetFolder -Recurse -File -ErrorAction SilentlyContinue |
Group-Object -Property Length |
Where-Object { $_.Count -gt 1 }
$duplicates = @()
$totalGroups = $fileGroups.Count
$counter = 0
if ($totalGroups -eq 0) {
Write-Host "`nNem találhatók azonos méretű fájlok, nincsenek duplikátumok." -ForegroundColor Green
exit
}
# 2. Csak az azonos méretű fájlok SHA256 hash-ének ellenőrzése
foreach ($group in $fileGroups) {
$counter++
Write-Progress -Activity "Duplikátumok keresése" -Status "Fájlcsoportok feldolgozása: $counter / $totalGroups" -PercentComplete (($counter / $totalGroups) * 100)
$hashTable = $group.Group | Get-FileHash -Algorithm SHA256 | Group-Object -Property Hash | Where-Object { $_.Count -gt 1 }
foreach ($hashGroup in $hashTable) {
foreach ($file in $hashGroup.Group) {
$duplicates += [PSCustomObject]@{
Hash = $hashGroup.Name
Path = $file.Path
SizeMB = [math]::Round((Get-Item $file.Path).Length / 1MB, 2)
}
}
}
}
# 3. Eredmények megjelenítése és mentése
if ($duplicates.Count -gt 0) {
Write-Host "`nTalált duplikátumok:" -ForegroundColor Green
$duplicates | Format-Table -AutoSize -Property Hash, SizeMB, Path
$duplicates | Export-Csv -Path $OutputFile -NoTypeInformation -Encoding UTF8
Write-Host "Az eredmények elmentve ide: $OutputFile" -ForegroundColor Yellow
} else {
Write-Host "`nNem találhatók duplikált fájlok." -ForegroundColor Green
}
Használati példák:
- Alapértelmezett használat (a mappa elérést megadva, az eredmény a beállítások szerint a
duplikatumok.csv-be kerül):PowerShell.\find-duplicates.ps1 -TargetFolder "C:\Users\Public\Documents" - Pozicionális paraméterként (nem kell kiírni a névadó kapcsolót):PowerShell
.\find-duplicates.ps1 "D:\Képek" - Egyedi CSV kimeneti fájlnév megadásával:PowerShell
.\find-duplicates.ps1 -TargetFolder "D:\Dokumentumok" -OutputFile "C:\Riportok\doksi_duplikatumok.csv"
Újdonságok a scriptben:
- Automatikus mappa-ellenőrzés (
ValidateScript): Ha nem létező vagy hibás mappa-útvonalat adsz meg, a script még a futás előtt jelez és leáll. - Mappa-kötelezőség (
Mandatory = $true): Ha paraméter nélkül indítod el a scriptet, a PowerShell automatikusan megkérdezi tőled a célmappa útvonalát.
Nem vagyok teljes mértékben elragadtatva az eredménytől, de mára ez bőven elég volt, majd folytatjuk…

Vélemény, hozzászólás?
Hozzászólás küldéséhez be kell jelentkezni.