2012-01-17 70 views
1

我试图使用DOS DIR/TW开关不能正常工作

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

其修改的时间戳比较文件的列表,包括控制文件本应返回controlfile作为olderfile修改日期是早于controlfile。但它似乎是在创建日期(olderfile的创建日期在controlfile之后)进行比较,因此将始终返回olderfile/tw开关应该告诉dir使用上次写入的日期(从dir /?),所以我不确定我做错了,如果我想/ tw按记录工作?

:UPDATE:

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

所以我现在的问题是我该如何解决这个给定的目录结构是必需的?

回答

1

首先解释为什么你的代码失败。

综观DIR而不/ B选项,它总是与该文件名显示文件路径作为一个标题行,从未在一起。当在同一目录中使用排序选项和两个文件规范时,该命令可以对文件进行排序并将它们显示在相同的目录标题下。即使文件名重复,您也确切知道标题引用了哪个文件。

但如果2个文件规范是不同的路径,有机会的话,文件名是一样的,只是路径不同。在这种情况下,除非每个文件规范都在自己的头文件中进行排序否则你无法分辨哪个文件是哪个文件。对单个文件进行排序没有多大意义,但请记住,文件规范可能包含通配符,因此它很有意义。因此,无论何时将排序选项与使用不同路径的多个文件规格组合在一起,DIR都会为每个路径分别进行排序,每个路径都有自己的标题。

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

一个解决方案,到达更加有问题的,特别是如果你想使用纯批次只有本地的Windows命令。处理日期可能会令批评生气。

最方便的批量解决方案,我能想出是第二次临时文件复制到父目录,运行父目录内的比较,然后删除临时副本。但是,如果文件很大,那可能会出现问题。它还假定文件名不存在于父目录中。如果确实(或可能)存在,则可以将该文件复制到不同的名称,这是已知的唯一。当然,你将不得不翻译结果。

从我可以告诉,任何其他批次的解决方案将需要解析的日期和时间。这打开了一整罐蠕虫。(这是可行的)

如果COPY建议是不可接受的(我不会责怪你,如果你决定不使用它),那么我建议使用非批处理,可能是VBScript,Javascript或Powershell。或者可能是一些混合方法,如一批VBScript抛出。

+0

在我读你的回复之前,我正在把控制文件复制到目标目录(所以第一个文件到子目录中)。然后清理子目录。这意味着不需要翻译。或者有没有一个原因,你说复制第二个文件,而不是反之亦然? – rutherford

+0

我看不出有任何区别。如果控制文件名称已存在于子目录中,则仍然存在问题。但是这听起来似乎并非如此。 – dbenham