Search 使用命令行按日期搜索

Search 使用命令行按日期搜索,search,date,find,cmd,dir,Search,Date,Find,Cmd,Dir,有没有办法根据日期在目录中搜索文件?我想查找创建日期大于特定日期的所有文件,是否可以使用dir命令执行此操作?据我所知,您不能这样做,但这种想法会起作用,但除非您的日期范围较短,否则仍然毫无用处;) dir本身不能按日期过滤,但您可以使用for命令解析dir的输出。如果您所在国家的dir以YMD格式打印日期,则只需将其与给定日期进行比较。如果日期部分的顺序不同,则必须使用另一个for命令来解析日期并将其更改为YMD。这将显示2月5日之后修改的文件列表 @Echo Off for /f "use

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

据我所知,您不能这样做,但这种想法会起作用,但除非您的日期范围较短,否则仍然毫无用处;)


dir
本身不能按日期过滤,但您可以使用
for
命令解析
dir
的输出。如果您所在国家的
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%%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
)

刚刚发现了
forfiles
命令

forfiles /s /m *.log /d -7 /c "cmd /c echo @path"
将在所有子目录中列出所有已修改七天以上的日志文件,尽管它似乎不查看创建日期。它确实支持指定特定日期


有关详细信息,请参阅
获取文件/?

使用PowerShell很容易做到这一点。我知道你的问题是关于cmd的,但是PS包含在Windows7和更高版本中。它也可以安装在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
对象的集合。此文件对象具有许多属性,可用于复杂筛选(文件大小、创建日期等)。有关文档,请参阅。

对我来说,更简单的方法是

dir /s *.xlsx | find "07/14/2016"

dir/OD
将按日期排序,至少TDIR不能,但Unix find命令可以。超级用户是一个优雅的解决方案,使用
xcopy
而无需实际复制。xcopy解决方案适用于已修改和未创建的日期。是时候更改已接受的答案了。谢谢,这正是我需要的,我可以使用小时:分钟进行比较吗。最后是学习shell脚本的有用书籍。要使用分钟进行比较,请执行以下更改:
tokens=1,2,4
,然后
如果“%%A%%B”GTR”2012-02-05 11:23“echo%%A%%B%%C
要学习,您可以先从三个外部链接开始,然后继续。超级有用!(当没有可用的PowerShell时)注意:如果要在某个日期后修改文件,则需要
+
而不是
-
作为
/d
参数,因此类似于
+02/05/2012
而不是
-7
。另外,为了显示每个文件的日期和时间输出,您可以使用
cmd/c echo@fdate@ftime@path
Caveat:who betide ye who you's want use UNC path with this。或者在Windows中的许多其他位置…
FORFILES/D
仅适用于修改日期。要解决UNC问题,只需使用
MKLINK/D
。对于希望
/D+7
向您显示不到七天前修改的文件的人,请不要使用。它会告诉你。您必须使用日期,如
+02/05/2012
。我尝试了:dir.*。svg |?LastWriteTimeUtc-gt([datetime]“2013-05-01”),但收到“Where Object:无法绑定参数'FilterScript'。无法将类型为“System.String”的“LastWriteTimeUtc”值转换为类型为“System.Management.Automation.ScriptBlock”“。我使用的语法适用于PS3.0及以上版本,我相信。如果您有PS 1.0或2.0,则必须使用如下脚本块:
|?{$\ LastWriteTimeUtc-gt([datetime]“2013-05-01”)}
啊,我在Windows7上使用PS 2。Thanksdir-file在2.0上抛出“找不到参数”是否有人可以解释为什么此命令查找所有在日期修改的文件,但忽略时间?dir-s-file |?LastWriteTimeUtc-gt([datetime]“2015-03-07 16:00:00”)也就是说,它发现所有文件在2015-03-07 00:00:00之后都被修改,这不是我想要的。我想在下午4点后修改所有文件。提前谢谢。
dir /s *.xlsx | find "07/14/2016"