我的情况很奇怪。我需要根据文件内容来查找文件,而不是根据名称,因为名称不是唯一的……
例如,我有一个名为“cat.jpg”的文件。这是一张猫的图片。我恰好在 500 万个不同的文件夹中有 500 万份此图片的副本,因此,虽然文件夹名称不同,但文件名相同:
cat1/cat.jpg
cat2/cat.jpg
cat3/cat.jpg
etc...
然而,其中一个 cat.jpg 实际上是一张狗的图片(文件仍名为“cat.jpg”)
假设我有一张狗的图片,我该如何找到它呢?我无法进行文件名搜索,因为这样我只会得到 500 万个“cat.jpg”的结果
答案1
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
答案2
虽然不是二进制搜索,但您可以使用 powershell 至少接近(假设除图像之外所有图像完全相同......)
基本上,找到您需要检查的细节,然后使用 Powershell 搜索每个图像,然后进行比较:
http://technet.microsoft.com/en-us/library/ee156812.aspx
您也可以使用 compare-object 来检查对象。两种方法都可以,但第二种方法更好/更简单。
答案3
如果您有它的精确副本,一旦您知道文件大小,您就可以搜索cat.jpg size:n.nnKB
,或者更具体地以字节为单位:cat.jpg size:nB
。
如果您知道文件大小但不知道名称,则搜索也size:nB
应该可以正常工作,或者至少可以大大缩小范围。