使用命令行按日期搜索

时间:2012-02-10 20:11:30

标签: search date find cmd dir

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

5 个答案:

答案 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