如何在多个目录中获取文件的上次修改日期?

时间:2014-09-12 20:08:11

标签: windows batch-file cmd

我正在尝试制作一个简单的批处理脚本,比较4个不同目录中的4个文件,并将“Last Modified”文件转换为变量。我最接近的是使用'dir'进行排序,并使用以下方法按修改日期对其进行排序:

for /f "tokens=*" %%G in ('dir *.txt /b /s /a-d /od C:\testing ') do SET newest1=%%G

但是,这只适用于一个目录。所以我的问题是,如何确定上一个修改过的文件来自多个目录(实际上需要四个不同的文件夹)。

我试过了:

FOR /F %%i IN ('DIR /b /s /O:D /T:W C:\testing\test1\test.txt C:\testing\test2\test2.txt') DO SET NEWEST=%%i

但这不适用于多个目录。我猜是因为我正在处理多个目录,排序不起作用,那么我还能用什么呢?

一些注意事项:

  • 需要将文件比较到秒

  • 有些文件可能会变得相当大,所以将它们全部复制到另一个文件夹然后进行比较会花费太长时间并且效率不高

1 个答案:

答案 0 :(得分:2)

如果您的系统是Windows Vista或更高版本(或者您可以下载Windows Server 2003资源工具包工具),则可以使用robocopy将4个文件复制到文件夹中。是的,我已经记下了这些笔记。诀窍是robocopy中的/create开关在目标文件夹中生成文件的0字节实例,但保留文件的时间戳。然后,您可以使用第一个代码来解决问题

如果您不能使用robocopy,但administrador权限不是问题

@echo off
    setlocal enableextensions disabledelayedexpansion

    for %%f in (
        "c:\\somewhere\\file1.txt"
        "c:\\other\\place\\file2.txt"
        "c:\\somewhere\\file2.txt"
    ) do for /f "tokens=2 delims==." %%a in ('
        wmic datafile where name^="%%~f" get lastModified /value
    ') do set "_t[%%a]=%%~f"

    for /f "tokens=2 delims==" %%a in ('set _t[') do set "lastFile=%%a"
    set "lastFile=%lastFile:\\=\%"

    echo %lastFile%

此代码使用wmic检索文件的时间戳,使用时间戳作为索引存储在环境中的数组中。然后检索列表,它将按升序排列。数组中的最后一个元素是较新的文件。