2014-09-12 72 views
0

我想做一个简单的批处理脚本,比较4个不同目录中的4个文件,并将“上次修改”文件放入一个变量中。我就用“目录”是排序和使用的修改日期排序它最接近的:如何获取多个目录中文件的最后修改日期?

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

这些文件是否有共同的文件规格?有关文件的详细信息可以帮助您获得最简单的解决方案。如果这些文件位于同一个驱动器上,那么移动操作是非常迅速的操作,它们可以被移回 - 但我们对这些文件知之甚少。 Robocopy也可以用来获取最新的文件 - 取决于文件的位置。 – foxidrive 2014-09-13 07:36:02

+0

你说“4个文件” - 所以你知道文件名 - 或者是文件名变量? – Magoo 2014-09-13 08:19:08

回答

2

如果您的系统是Windows Vista或更高版本(或者如果您可以下载Windows Server 2003 Resource Kit Too ls),您可以使用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来检索文件的时间戳,店使用时间戳作为索引的环境中的数组。然后检索列表,这将按升序排列。数组中的最后一个元素是较新的文件。

+0

感谢您的快速响应。但是,您提供的代码不适用于我(在具有管理权限的Windows 7计算机上对其进行测试)。我简单地用实际文件替换文件名并试着运行它。它会出现以下错误三次:“没有实例可用”。它在达到for语句时似乎失败了。我已验证路径名称是正确的,并且没有空格/特殊字符。 – steven 2014-09-12 22:10:47

+0

@steven,我的错,我没有删除所有的测试代码,并且循环遍历了一个不存在的文件(“wmic' answer”No Instance(s)Available“)。代码已更新。无论如何,对于Windows 7,4个“robocopy”操作可能比4个查询要快。 – 2014-09-13 07:24:17

+0

谢谢!为我工作。 – steven 2014-09-14 20:50:41

相关问题