Бинарный поиск файлов в Windows 8?
Я в странной ситуации. Мне нужно найти файл на основе его содержимого, а не имени, потому что имя не уникально...
Например, у меня есть файл с именем "cat.jpg". Это изображение кота. У меня получилось 5 миллионов копий этого в 5 миллионов разных папок, поэтому, хотя имена папок разные, имена файлов одинаковы:
cat1/cat.jpg
cat2/cat.jpg
cat3/cat.jpg
etc...
Тем не менее, один из этих cat.jpgs на самом деле является изображением собаки (и файл по-прежнему называется "cat.jpg")
Как мне найти собаку, если у меня есть точная копия? Я не могу выполнить поиск по имени файла, потому что тогда я просто получу 5 миллионов результатов "cat.jpg"
3 ответа
Вот пример использования fc.exe
с бинарным флагом сравнения:
for /R "C:\Some Path" %f in (*.jpg) do @(FC /B "C:\Some Other Path Maybe\dog.jpg" "%f" | FIND "FC: no differences encountered.") && echo %f
Это будет рекурсивно просматривать файлы и папки в C:\Some Path
назначение JPEG для %f
, FC
передаст результат сравнения с dog.jpg
а также %f
в утилиту сравнения строк, FIND
,
Если файлы соответствуют выводу из FC
будет FC: различий не обнаружено.
&&
Значит это echo %f
будет срабатывать, если эта строка найдена FIND
,
Так что если есть совпадение, вы должны увидеть что-то вроде
FC: no differences encountered.
C:\Some Path\cat5000000\cat.jpg
Хотя это и не бинарный поиск, вы можете использовать powershell, чтобы хотя бы приблизиться (при условии, что все изображения точно такие же, кроме изображения...)
В основном, найдите детали, с которыми вам нужно проверить, и затем используйте Powershell для поиска каждого изображения, а затем сравните:
http://technet.microsoft.com/en-us/library/ee156812.aspx
Вы можете использовать сравнить объект, чтобы проверить объект тоже. В любом случае должен работать, но второй способ будет лучше / проще.
Если у вас есть точная копия, когда вы знаете размер файла, вы можете искать cat.jpg size:n.nnKB
или, более конкретно, в байтах: cat.jpg size:nB
,
Если у вас есть размер файла и вы не знаете имя, ищите просто size:nB
должно работать нормально, или, по крайней мере, значительно сузить его.