1

我正在尝试使用修改后的时间戳将文件列表与控制文件进行比较

dir /b /tw /od controlfile olderfile | more +1

这应该返回 ,controlfile因为修改日期olderfile早于controlfile。但是,它似乎是在创建日期进行比较(olderfile的创建日期在controlfile's 之后),因此将始终返回olderfile/tw开关应该告诉dir使用最后写入的日期(从)dir /?所以我不确定如果我希望 /tw 像记录的那样工作我做错了什么?

:更新:

到目前为止,我olderfile在相对于controlfile. 当我复制olderfile到与比较工作相同的目录时controlfile- 即上述命令返回controlfile。因此,在子文件夹中显然会破坏比较(即使子文件夹修改日期就像olderfile's 本身的日期早于 's 的日期controlfile)。

所以我现在的问题是,鉴于需要目录结构,我该如何解决这个问题?

4

1 回答 1

1

首先解释您的代码失败的原因。

在没有 /B 选项的情况下查看 DIR,它始终将文件路径显示为标题行,而不是与文件名一起显示。当在同一目录中使用排序选项和 2 个文件规范时,该命令能够对文件进行排序并将它们显示在同一目录标题下。即使文件名重复,您也可以确切地知道标题所引用的文件。

但如果 2 个文件规范位于不同的路径中,则文件名可能相同,只是路径不同。在这种情况下,除非每个文件规范都在其自己的标题下排序,否则排序不会有好处;否则你无法分辨哪个文件是哪个。对单个文件进行排序没有多大意义,但请记住,文件规范可能包含通配符,所以它是有意义的。因此,每当排序选项与使用不同路径的多个文件规范组合时,DIR 将为每个路径进行单独的排序,每个路径都有自己的标题。

添加 /B 选项会删除路径标题,但不会改变排序行为!绝对是一个愚蠢和无用的设计,但这就是你得到的。

获得解决方案的问题要大得多,尤其是如果您只想使用纯批处理和本机 Windows 命令。使用日期可能会激怒批次。

我能想到的最方便的批处理解决方案是将第二个文件临时复制到父目录中,在父目录中运行您的比较,然后删除临时副本。但如果文件很大,这可能是个问题。它还假设文件名在父目录中不存在。如果它确实(或可能)存在,您可以将文件复制到不同的名称,已知是唯一的。当然,您必须翻译结果。

据我所知,任何其他批处理解决方案都需要解析日期和时间。这会打开一整罐蠕虫。(这是可行的)

如果 COPY 建议不可接受(如果您决定不使用它,我不会责怪您),那么我建议使用批处理以外的东西,也许是 VBScript、Javascript 或 Powershell。或者可能是像批处理这样的混合方法,其中包含一些 VBScript。

于 2012-01-17T16:38:01.947 回答