我有 2 个硬盘,我将一个硬盘上的所有内容复制到另一个硬盘上,但有些文件没有复制,因为它们已损坏。有没有一种简单的方法可以检查一个硬盘上的哪些文件不在另一个硬盘上?
答案1
robocopy sourcedriveletter: destinationdriveletter: /MIR /LOG:logfilename.txt /TEE /L
Robocopy 是 Windows 内置的命令行工具。您可以通过打开 cmd 提示符(为此,我猜可能是以管理员身份)并键入来检查选项,robocopy /?
或者robocopy /? > %USERPROFILE%\desktop\robocopyoptions.txt
如果您想要帮助文档的文本文件版本。
在我上面的示例中,/MIR
表示“镜像”,它在“目标”中复制“源”,并删除“目标”中不在“源”中的任何内容。
/log:
记录到文件,/TEE
输出到控制台以及日志文件。
最后的命令/L
将其设置为仅列出,并且实际上不会复制或删除文件。
日志将非常清楚地向您显示源中哪些文件在目标中不存在。
当然,我强烈建议您先检查帮助文档以确保我的示例是正确的。
答案2
OP 反馈:excel 方法对他不起作用,Matlab 方法未经测试 我有一个非常不优雅的解决方案,但我认为它可以完成工作(假设您有 excel)。只有当文件名数量适合 excel 时,它才有效。(excel 的最大行数有限:1,048,576)。
转到 cmd(我假设您使用的是 Windows)。将目录更改为第一个驱动器。输入:
dir /s/b/o:gn > drive1.txt
对第二个驱动器执行相同操作,但更改 txt 文件的名称。
我从以下位置获取了 cmd 行:https://stackoverflow.com/questions/3447503/how-to-get-a-list-of-sub-folders-and-their-files-ordered-by-folder-names。
将两个输出复制到 excel 中(假设是 2007 或更新版本)。我知道的最简单的选项如下:
- 选择包含 cmd 输出的列。
- 在“数据”选项卡的“排序和筛选”组中,单击“高级”。
- 在“高级筛选”对话框中,执行以下操作之一:
- 要就地过滤单元格范围或表格,请单击“就地过滤列表”。
- 要将过滤器的结果复制到另一个位置,请执行以下操作:
- 单击“复制到其他位置”。
- 在复制到框中,输入单元格引用。
- 或者,单击“折叠对话框按钮图像”以暂时隐藏对话框,选择工作表上的单元格,然后按“展开对话框按钮图像”。
- 选中仅唯一记录复选框,然后单击确定。
- 选定范围内的唯一值将被复制到新位置。原始数据不受影响。
这样,您应该拥有所有唯一文件名的列表,该列表与所有未复制的文件名的列表相同。
或者,您可以使用 Matlab 中的 cmd 命令。
Matlab 中的命令可能是:
DosCommand=sprintf('%s %s','dir / B',directory);
[status, cmdout]=dos(DosCommand);
end
Filenames = strread(cmdout,'%s');
然后执行:
NonCopiedFilenames =
A(sum(bsxfun(@eq, A(:), A(:).'))==1);
唯一值技巧是从以下网址复制而来:https://stackoverflow.com/questions/19236914/how-to-find-a-unique-value-in-a-matrix-by-using-matlab