You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按修改日期对findstr命令返回的文件进行排序?

如何按修改日期对findstr命令返回的文件进行排序?

嗨,这个问题我刚好碰到过,直接用findstr确实没法直接按修改日期排序,不过咱们可以结合Windows命令行的其他工具来实现,给你两个实用的方案:

方案一:使用CMD命令组合实现

首先给findstr加上/m参数,让它只输出匹配到的文件名(而不是具体匹配的行),这样后续更容易处理。然后结合for和dir命令来完成排序:

直接在CMD窗口执行的命令:

for /f "delims=" %f in ('findstr /s /i /m "my-key-word" *.*') do @dir /tw /o:d "%f"

参数解释:

  • findstr /s /i /m "my-key-word" *.*:/s递归搜索子目录,/i忽略大小写,/m仅返回匹配的文件名
  • for /f "delims=" %f in (...):捕获findstr的输出,把每个文件名赋值给变量%f
  • dir /tw /o:d "%f":/tw指定按修改时间排序,/o:d按日期从早到晚排列(如果要从新到旧排序,把/o:d改成/o:-d)
  • @:用来隐藏dir命令本身的执行提示,只显示结果

如果想让输出更简洁,只显示文件名和路径,可以加上/b参数:

for /f "delims=" %f in ('findstr /s /i /m "my-key-word" *.*') do @dir /tw /o:d /b "%f"

如果是在批处理文件里使用,记得把变量%f改成%%f:

@echo off
for /f "delims=" %%f in ('findstr /s /i /m "my-key-word" *.*') do @dir /tw /o:d "%%f"

方案二:使用PowerShell(更灵活)

如果你用PowerShell的话,实现起来会更直观,代码可读性也更强:

Get-ChildItem -Recurse | Select-String -Pattern "my-key-word" -CaseSensitive:$false | Select-Object -Unique Path | Get-Item | Sort-Object LastWriteTime

步骤解释:

  1. Get-ChildItem -Recurse:递归获取当前目录下的所有文件
  2. Select-String -Pattern "my-key-word" -CaseSensitive:$false:匹配包含关键词的文件,-CaseSensitive:$false对应findstr的/i忽略大小写
  3. Select-Object -Unique Path:去除重复的文件路径(避免同一个文件因多行匹配被多次输出)
  4. Get-Item:获取文件的完整对象信息(包含修改时间等属性)
  5. Sort-Object LastWriteTime:按文件最后修改时间排序,默认升序;如果要降序(最新的在前),加上-Descending参数即可

备注:内容来源于stack exchange,提问作者Robin Sun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 13:48:09