如何按修改日期对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的输出,把每个文件名赋值给变量%fdir /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
步骤解释:
Get-ChildItem -Recurse:递归获取当前目录下的所有文件Select-String -Pattern "my-key-word" -CaseSensitive:$false:匹配包含关键词的文件,-CaseSensitive:$false对应findstr的/i忽略大小写Select-Object -Unique Path:去除重复的文件路径(避免同一个文件因多行匹配被多次输出)Get-Item:获取文件的完整对象信息(包含修改时间等属性)Sort-Object LastWriteTime:按文件最后修改时间排序,默认升序;如果要降序(最新的在前),加上-Descending参数即可
备注:内容来源于stack exchange,提问作者Robin Sun
相关产品推荐
相关产品推荐

