17

有没有办法根据日期搜索目录中的文件?我想查找创建日期大于特定日期的所有文件,是否可以使用dir命令来完成?

4

5 回答 5

41

刚刚发现forfiles命令。

forfiles /s /m *.log /d -7 /c "cmd /c echo @path"

将列出所有子目录中超过 7 天前修改的所有日志文件,尽管它似乎没有查看创建日期。它确实支持指定特定日期。

有关forfiles /?更多信息,请参阅。

于 2013-05-29T17:08:48.777 回答
6

dir本身不能按日期过滤,但您可以解析dirusingfor命令的输出。如果您所在国家/地区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
)
于 2012-02-11T16:30:11.733 回答
6

对我来说更简单的方法是

dir /s *.xlsx | find "07/14/2016"
于 2016-07-14T20:31:45.813 回答
3

好吧,据我所知,您不能,但是这种想法会起作用,但是除非您的日期范围很短,否则仍然真的没用;)

for /R %a in (01 02 03 04 05) do dir | find "02/%a/2012"
于 2012-02-10T21:41:20.843 回答
1

使用 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

于 2013-12-08T16:45:51.277 回答