У меня есть две папки (Fold1 и Fold2) с множеством файлов в разных форматах (.doc, .pdf, .xml, .html) в них, и общее количество элементов (файлов) может варьироваться в каждой папке.Я пытаюсь сравнить контрольные суммы MD5 для каждого файла, присутствующего в обеих папках, и для файлов, которые являются дополнительными в обеих папках, просто перечислите их контрольные суммы, чтобы я мог скопировать / проверить эти файлы позже.
Этогде я достиг:
$path1 = "C:\Users\username\Desktop\Fold1"
$path2 = "C:\Users\username\Desktop\Fold2"
$Data1 = dir "C:\Users\username\Desktop\Fold1" -Recurse |
Where-Object {!$_.PSIsContainer} |
Get-FileHash -Algorithm MD5 |
select @{n='Hash';e={$_.Hash}}, @{n='File';e={Split-Path $_.Path -Leaf}}
$Data2 = dir "C:\Users\username\Desktop\Fold2" -Recurse |
Where-Object {!$_.PSIsContainer} |
Get-FileHash -Algorithm MD5 |
select @{n='Hash';e={$_.Hash}}, @{n='File';e={Split-Path $_.Path -Leaf}}
$Full = foreach ($d in $Data1) {
$d | Select-Object Hash, File,@{n="Hash2";e={
($Data2 | Where-Object File -eq $d.File).Hash
}}
}
$Full | Export-Csv .\report.csv
Это дает следующий вывод:
Задача 1:
Поскольку я использую Where-Object File -eq $d.File
, так что на всякий случай, если в папке 2 есть один дополнительный файл, чем в папке 1, в таком случае он не будет захватывать дополнительный файл, и сравнение пойдет не так, потому что мне нужно захватитьвсе предметы независимо.Чтобы избежать этого, я попытался добавить .Count
, который выглядит следующим образом:
$Data1Count = (Get-ChildItem -File -Path $path1).Count
$Data2Count = (Get-ChildItem -File -Path $path2).Count
if ($Data1Count -gt $Data2Count) {
$Full = foreach ($d in $Data1) {
$d | Select-Object Hash,File,@{n="Hash2";e={
($Data2 | Where-Object File -eq $d.File).Hash
}}
}
$Full
} elseif ($Data2Count -gt $Data1Count) {
$Full = foreach ($d in $Data2) {
$d | Select-Object Hash,File,@{n="Hash2";e={
($Data1 | Where-Object File -eq $d.File).Hash
}}
}
$Full
} else {
$Full = foreach ($d in $Data1) {
$d | Select-Object Hash,File,@{n="Hash2";e={
($Data2 | Where-Object File -eq $d.File).Hash
}}
}
$Full
}
Задача 2:
Этот метод перечисляет все элементы (файлы) из одногоиз папок (Folder1 или Folder2), в зависимости от того, какое число файлов больше, но все равно не перечисляются дополнительные файлы в другой папке.Просто чтобы показать вам, вот структура каталогов:
и это вывод (так как количество файлов в папке 2 равно> Папка 1):
То, что я пытаюсь достичь, это что-то вроде следующего в качестве результата сравнения, в котором перечислены все соответствующие файлы, а также дополнительные файлыв любой папке: