有没有办法根据日期搜索目录中的文件?我想查找创建日期大于特定日期的所有文件,是否可以使用dir
命令来完成?
5 回答
刚刚发现forfiles
命令。
forfiles /s /m *.log /d -7 /c "cmd /c echo @path"
将列出所有子目录中超过 7 天前修改的所有日志文件,尽管它似乎没有查看创建日期。它确实支持指定特定日期。
有关forfiles /?
更多信息,请参阅。
dir
本身不能按日期过滤,但您可以解析dir
usingfor
命令的输出。如果您所在国家/地区dir
以 YMD 格式打印日期,则只需将其与给定日期进行比较。如果日期部分的顺序不同,则必须使用另一个for
命令来解析日期并将其更改为 YMD。这将显示 2 月 5 日之后修改的文件列表。
@Echo Off
for /f "usebackq tokens=1,4 skip=5" %%A in (`dir /-c`) do (
if %%A GTR 2012-02-05 echo %%A %%B
)
if
进行标准字符串比较,因此如果摘要行通过比较,最后您可以获得额外的行。为避免它,您可以使用if %%A GTR 2012-02-05 if exist %%B echo %%A %%B
编辑:有更好的方法可以避免解析dir
输出,还允许按时间搜索,而不仅仅是按日期:
@Echo Off
for /r %%A in (*) do (
if "%%~tA" GTR "2012-02-05 00:00" echo %%~tA %%A
)
对我来说更简单的方法是
dir /s *.xlsx | find "07/14/2016"
好吧,据我所知,您不能,但是这种想法会起作用,但是除非您的日期范围很短,否则仍然真的没用;)
for /R %a in (01 02 03 04 05) do dir | find "02/%a/2012"
使用 PowerShell 很容易做到这一点。我知道您的问题是关于 cmd,但 PS 包含在 Windows 7 及更高版本中。它也可以安装在 XP 和 Vista 上。
使用Get-ChildItem
命令(别名为dir
)获取所有文件。将输出通过管道传递给Where-Object
命令(别名为?
)以返回日期大于 ( -gt
) 特定日期的文件。
对于 Powershell 2.0(Windows 7 上的默认设置),您必须使用脚本块:
dir -file | ? {$_.LastWriteTimeUtc -gt ([datetime]"2013-05-01")}
对于 Powershell 3.0(默认在 Windows 8 上)及更高版本,您可以改用这种更简单的语法:
dir -file | ? LastWriteTimeUtc -gt ([datetime]"2013-05-01")
该dir -file
命令返回System.IO.FileInfo
对象的集合。此文件对象具有许多可用于复杂过滤的属性(文件大小、创建日期等)。有关文档,请参阅MSDN。