是否有命令行选项或任何方法可以让 Robocopy 检测 Windows 上文件或文件夹中的大小写更改/重命名?例如,如果我将源文件“example.txt”重命名为“Example.txt”,Robocopy 不会检测到此重命名,更改将被忽略,文件不会复制到目标目录。这现在导致目标目录与源目录不同步。任何关于如何解决或解决这个问题的建议都将不胜感激!
答案1
Robocopy 有一个“仅列出”命令,也是一个详细命令, robocopy 语法因此,list only 命令可以生成未复制的文件列表的输出(因为 robocopy 认为它们是相同的),您可以在电子表格中对其进行修改以生成输入文件,从而允许您删除目标目录中的问题文件,然后 robocopy 当然可以复制它们。不幸的是,您没有提供任何有关任务范围的详细信息,因此此说明肯定不是花哨的解决方案。它是可以通过脚本完成的任务,但您必须决定调试的时间是否值得。
答案2
Windows 不区分大小写,这意味着大小写混合将被视为相同。如果您进行镜像(使用 /MIR 选项),它会将“source\Example.txt”和“destination\example.txt”视为“相同”文件,并且正如您所说,它不会被复制,因为不需要复制“相同”文件。
我同意那个说这是一个缺陷的人的观点,但是,robocopy 采用基于时间戳和文件大小的启发式方法,因此 robocopy“应该”有缺陷,或者至少不完美。
解决此问题的一种方法是前往目的地并删除文件,然后重新运行 Robocopy。
另一种方法是通过更改源文件的时间戳或文件大小来“帮助” Robocopy 检测更改。就 Robobopy 而言,更改文件内容而不更改文件大小并回溯时间戳可能不会代表更改。
最后,您可能需要运行 cygwin“diff”来验证 robocopy 的工作。但是,这种验证本身并不完美,因为 cygwin 区分大小写,因此它不会比较文件“example.txt”和“Example.txt”,而是报告源中缺少一个文件,目标中缺少另一个文件。但是,对于绝大多数没有发生这种大小写差异的文件,cygwin“diff”确实可以验证 robocopy。
如果您不熟悉 cygwin,那么进行 diff 时唯一需要知道的是,C: 驱动器写为 /cygdrive/c,D: 驱动器写为 /cygdrive/d,并且与 Linux 和 Unix 一样,斜杠字符是分隔符。这与 Windows 不同,在 Windows 中反斜杠是分隔符。
例如,假设“文档”的原始树位于 C: 驱动器上,而备份位于 D: 驱动器上,则以下 cygwin 命令将验证备份。(调整路径以适应。)
diff --recursive --brief /cygdrive/c/users/userName/Documents /cygdrive/d/windowsbackup/Documents