Duplicate File Finder
Jump to navigation
Jump to search
Originally from Reddit but I added a .bat wrapper
duplicate.ps1
$srcDir = 'C:\test'
$maxThreads = 6 # Tweak this value for more or less threads
$rs = [runspacefactory]::CreateRunspacePool(1, $maxThreads)
$rs.Open()
$tasks = Get-ChildItem -Path $srcDir -File -Recurse | Group-Object Length |
Where-Object Count -GT 1 | ForEach-Object {
$ps = [powershell]::Create().AddScript({
$args[0] | Get-FileHash -Algorithm MD5 |
Group-Object Hash |
Where-Object Count -GT 1
}).AddArgument($_.Group)
$ps.RunspacePool = $rs
@{ ps = $ps; iasync = $ps.BeginInvoke() }
}
$tasks | ForEach-Object {
try {
$_.ps.EndInvoke($_.iasync)
}
finally {
if($_.ps) {
$_.ps.Dispose()
}
}
}
if($rs) {
$rs.Dispose()
}
run.bat
powershell -ExecutionPolicy Bypass -File duplicate.ps1 > out.txt