[About a month ago I asked a similar question, requesting a specific CLI software tool that would perform the required task ; it was quickly blocked on the ground that asking for specific software tools is forbidden here, based on the justifications that “they become outdated quickly and attract opinion-based answers” — which frankly is absurd, since everything becomes outdated eventually and everything can attract opinion-based answers, and besides, sometimes opinion-based answers are welcome. But someone had the time to post a reply suggesting that this could most likely be done with PowerShell. So now, about a month later, I’m asking how I could use PowerShell to perform that task which was stalled in the mean time.]
Я ищу метод PowerShell для сравнения двоичного содержимого двух файлов, начиная с разных смещений, останавливаясь на первой выявленной разнице и сообщая о соответствующих смещениях. Например, файл A имеет размер 100 МБ, файл B имеет размер 500 МБ, это может быть определено что начало файла B совпадает с файлом A по смещению 104857600, но что (на основе сравнения контрольных сумм между файлом B и 100-мегабайтным блоком файла A, начиная с 104857600) файл B не полностью содержится в файле A. Итак, теперь мне нужно придумайте сценарий, который будет выполнять побайтовое сравнение между файлом A, начиная со смещения 104857600, и файлом B, начиная с смещения 0, а затем сообщать значения смещения первого несовпадающего байта.
Инструменты интерфейса командной строки Windows comp
и fc
не позволять задавать начальные смещения для сравнения (comp
даже не позволяет сравнивать файлы разного размера). На основе этой темы я тестировал diffutils
, который, похоже, тоже не соответствует этим требованиям. Это можно сделать с помощью шестнадцатеричного редактора, такого как WinHex, или специальных графических утилит сравнения / слияния, таких как WinMerge, но здесь требуется утилита командной строки для одновременной обработки сотен файлов с помощью сценария. В cmp
инструмент описано здесь казалось бы, делает именно то, что мне нужно, но, похоже, он не доступен как отдельный исполняемый файл Windows.
У меня очень мало опыта работы с PowerShell, поэтому я не знаю, с чего начать.
Цель: я произвел полное восстановление данных с жесткого диска емкостью 4 ТБ, как в режиме анализа файловой системы, так и в так называемом режиме «вырезания сырых файлов» (путем поиска по сигнатуре файлов); Большинство файлов, восстановленных с помощью второго метода, на самом деле являются дубликатами или фрагментами файлов, которые можно полностью восстановить с помощью первого метода. Полные дубликаты легко идентифицировать, для этого есть много специальных инструментов. Мне было труднее идентифицировать фрагменты файлов, которые полностью содержались в другом файле; Мне удалось сделать это с помощью 1) сценария PowerShell для извлечения короткой строки поиска из каждого неопознанного файла в простой текстовый список, 2) WinHex для запуска «одновременного поиска» на основе списка строк поиска и 3) PowerShell. скрипт для расчета контрольных сумм на основе поисковых запросов от WinHex. Теперь у меня остались файлы, для которых можно было найти совпадение, но которые не являются идеальными совпадениями, что означает, что они содержат части разных исходных файлов (скорее всего, потому, что исходный диск был фрагментирован). В конце должны оставаться только фрагменты файлов, не имеющие аналогов в основном каталоге восстановления.