Windows 如何获取多个目录中文件的最后修改日期?
我试图制作一个简单的批处理脚本,比较4个不同目录中的4个文件,并将“上次修改的”文件放入一个变量中。我最接近的方法是使用“dir”进行排序,并使用以下方法按修改日期进行排序:Windows 如何获取多个目录中文件的最后修改日期?,windows,batch-file,cmd,Windows,Batch File,Cmd,我试图制作一个简单的批处理脚本,比较4个不同目录中的4个文件,并将“上次修改的”文件放入一个变量中。我最接近的方法是使用“dir”进行排序,并使用以下方法按修改日期进行排序: for /f "tokens=*" %%G in ('dir *.txt /b /s /a-d /od C:\testing ') do SET newest1=%%G 但是,这将只在一个目录上工作。所以我的问题是,我如何确定最后修改的文件来自多个目录(实际上四个不同的文件夹都需要它) 我试过: FOR /F %%i I
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
但这不适用于多个目录。我猜,因为我处理的目录不止一个,所以排序无法工作,那么我还能用什么呢
一些注意事项:
- 需要比较文件到秒
- 有些文件可能会变得相当大,因此将它们全部复制到另一个文件夹中,然后对它们进行比较会花费太长时间,而且效率也不高
robocopy
将4个文件复制到一个文件夹中。是的,我读了笔记。诀窍在于robocopy中的/create
开关在目标文件夹中生成文件的0字节实例,但保留文件的时间戳。然后,您可以使用第一个代码来解决问题
如果您不能使用robocopy,但管理员权限不是问题
@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
检索文件的时间戳,并使用时间戳作为索引存储在环境中的数组中。然后按升序检索列表。数组中的最后一个元素是较新的文件。感谢您的快速响应。但是,您提供的代码不适用于我(在具有管理员权限的Windows 7计算机上进行测试)。我只是用实际文件替换了文件名,然后试着运行它。它给出以下错误三次:“没有可用的实例。”当它到达for语句时,它似乎失败了。我已经验证了路径名是否正确,并且没有空格/特殊字符。@steven,是我的错,我没有删除所有测试代码,循环正在一个不存在的文件上迭代(wmic的原因是回答“没有可用的实例”)。代码已更新。无论如何,对于windows 7,4robocopy
操作可能比对wmi的4次查询更快。这些文件是否有一个通用的文件规范?有关文件的详细信息可以帮助您获得最简单的解决方案。如果文件在同一个驱动器上,那么移动是一个非常快速的操作,它们可以向后移动,但我们对文件知之甚少。Robocopy也可以用来获取最新的文件-这取决于文件的位置。你说“4个文件”-所以你知道文件名-或者是文件名变量?