Batch file DOS dir/tw开关不工作

Batch file DOS dir/tw开关不工作,batch-file,dos,last-modified,dir,if-modified-since,Batch File,Dos,Last Modified,Dir,If Modified Since,我试图使用以下命令将文件列表与修改后的时间戳上的控制文件进行比较: dir /b /tw /od controlfile olderfile | more +1 这将返回控制文件,因为旧文件上的修改日期早于控制文件。但是,它似乎在创建日期进行比较(olderfile的创建日期在controlfile之后),因此将始终返回olderfile。/tw开关应该告诉dir使用上次写入日期(从dir/?),因此如果我希望/tw按文档所述工作,我不确定我做错了什么 :更新: 到目前为止,我在与控制文件相关

我试图使用以下命令将文件列表与修改后的时间戳上的控制文件进行比较:

dir /b /tw /od controlfile olderfile | more +1
这将返回
控制文件
,因为
旧文件
上的修改日期早于
控制文件
。但是,它似乎在创建日期进行比较(
olderfile
的创建日期在
controlfile
之后),因此将始终返回
olderfile
/tw
开关应该告诉
dir
使用上次写入日期(从
dir/?
),因此如果我希望/tw按文档所述工作,我不确定我做错了什么

:更新:

到目前为止,我在与
控制文件
相关的子文件夹中有
旧文件
。当我将
olderfile
复制到与
controlfile
相同的目录时,比较按预期进行-即上述命令返回
controlfile
。因此,在子文件夹中显然会破坏比较(即使子文件夹的修改日期类似于
olderfile
本身早于
controlfile


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

首先解释一下代码失败的原因

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

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

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

达成一个解决方案的问题要大得多,特别是如果您只想使用纯批处理和本机Windows命令。处理日期可能会激怒批处理

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

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


如果复制建议不可接受(如果您决定不使用它,我不会责怪您),那么我建议使用批处理以外的其他方法,可能是VBScript、Javascript或Powershell。或者可能是一种混合方法,比如批处理和抛出一些VBScript。

首先解释代码失败的原因

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

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

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

达成一个解决方案的问题要大得多,特别是如果您只想使用纯批处理和本机Windows命令。处理日期可能会激怒批处理

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

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


如果复制建议不可接受(如果您决定不使用它,我不会责怪您),那么我建议使用批处理以外的其他方法,可能是VBScript、Javascript或Powershell。或者可能是一种混合方法,比如批处理,并加入一些VBScript。

在阅读您的回复之前,我正在将控制文件复制到目标目录(因此将第一个文件复制到子目录)。然后清理子目录。这意味着不需要翻译。或者你为什么说复制第二份文件而不是维克