有没有办法根据日期搜索目录中的文件?我想查找创建日期大于特定日期的所有文件,是否可以使用dir
命令执行此操作?
答案 0 :(得分:39)
刚刚发现了forfiles
命令。
forfiles /s /m *.log /d -7 /c "cmd /c echo @path"
将在所有子目录中列出已修改超过七天的所有日志文件,但它似乎不会查看创建日期。它确实支持指定特定日期。
有关详细信息,请参阅forfiles /?
。
答案 1 :(得分:4)
dir
本身不能按日期过滤,但您可以使用dir
命令解析for
的输出。如果您所在的国家/地区dir
以YMD格式打印日期,则只需将其与给定日期进行比较即可。如果日期部分的顺序不同,则必须使用另一个for
命令来解析日期并将其更改为YMD。这将显示在5月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
)
答案 2 :(得分:3)
据我所知,你不能这样,但这种想法会起作用,但除非你的日期范围很短,否则仍然没用;)
for /R %a in (01 02 03 04 05) do dir | find "02/%a/2012"
答案 3 :(得分:3)
对我来说更简单的方法就像是
dir /s *.xlsx | find "07/14/2016"
答案 4 :(得分:0)
使用PowerShell很容易。我知道您的问题是关于cmd,但PS包含在Windows 7及更高版本中。它也可以安装在XP和Vista上。
使用Get-ChildItem
命令(别名为dir
)获取所有文件。将输出传递给Where-Object
命令(别名为?
),以返回日期大于(-gt
)特定日期的文件。
对于Powershell 2.0(Windows 7上的默认设置),您必须使用scriptblock:
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。