Инструменты пользователя

Инструменты сайта


поиск_дубликатов_файлов

Поиск дубликатов файлов

Скрипт одной строкой

По каталогу рекурсивно отбираются файлы у которых одинаковое имя и размер:

Dir -rec | group name,length | where {$_.count -gt 1}

Полные пути дубликатов, подряд:

Dir -rec | group name,length | ?{$_.count -gt 1} | Select -Expand group  | ft fullname

Группами дубликатов

dir -rec | group name,length | ? {$_.count -gt 1} | %{$_ | select -expand group | ft fullname}

Использованные сокращения (все присутствуют в PowerShell по умолчанию)

  • dir – get-childitem
  • -rec – -recurse
  • group – group-object
  • ? – where-object
  • % – foreach-object
  • select – select-object
  • ft – format-table

Поиск дубликатов по Hash

# .SYNOPSIS
# find_ducplicate_files.ps1 finds duplicate files based on hash values.
 
# .DESCRIPTION
# Prompts for entering file path. Shows duplicate files for selection.
# Selected files will be moved to new folder C:\Duplicates_Date for further review.
 
# .EXAMPLE
# Open PowerShell. Nagivate to the file location. Type .\find_duplicate_files.ps1 OR
# Open PowerShell ISE. Open find_duplicate.ps1 and hit F5.
 
 
############# Find Duplicate Files based on Hash Value ###############
''
$filepath = Read-Host 'Enter file path for searching duplicate files (e.g. C:\Temp, C:\)'
 
If (Test-Path $filepath) {
''
Write-Warning 'Searching for duplicates ... Please wait ...'
 
$duplicates = Get-ChildItem $filepath -File -Recurse `
-ErrorAction SilentlyContinue |
Get-FileHash |
Group-Object -Property Hash |
Where-Object Count -GT 1
 
If ($duplicates.count -lt 1)
 
{
Write-Warning 'No duplicates found.'
Break ''
}
 
else {
Write-Warning "Duplicates found."
$result = foreach ($d in $duplicates)
{
$d.Group | Select-Object -Property Path, Hash
}
 
$date = Get-Date -Format "MM/dd/yyy"
$itemstomove = $result |
Out-GridView -Title `
"Select files (CTRL for multiple) and press OK. Selected files will be moved to C:\Duplicates_$date" `
-PassThru
 
If ($itemstomove)
 
{
New-Item -ItemType Directory `
-Path $env:SystemDrive\Duplicates_$date -Force
Move-Item $itemstomove.Path `
-Destination $env:SystemDrive\Duplicates_$date -Force
''
Write-Warning `
"Mission accomplished. Selected files moved to C:\Duplicates_$date"
 
Start-Process "C:\Duplicates_$date"
}
 
else
{
Write-Warning "Operation aborted. No files selected."
}
}
}
else
{
Write-Warning `
"Folder not found. Use full path to directory e.g. C:\photos\patrick"
}







поиск_дубликатов_файлов.txt · Последнее изменение: 2021/02/15 16:49 — 82.204.251.18