如何合并dir与forfiles按修改日期输出子目录到TXT文件
可行实现方案
两个命令的能力完全可以整合,不需要额外安装工具,基于Windows内置命令行就能实现「遍历目录、按最后修改日期筛选、仅输出符合条件的子文件夹路径到TXT」的需求,具体有两种可直接落地的写法:
方案1:纯CMD命令行实现(兼容所有Windows版本)
这个写法同时复用了原dir命令的递归遍历、导出TXT逻辑,以及forfiles的日期筛选能力,额外加了仅保留文件夹的过滤逻辑,避免把普通文件混入输出:
- 先把命令行的工作路径切换到你要遍历的目标根目录(比如示例里的Downloads目录)
- 执行下面的命令:
forfiles /S /D +04/12/2021 /C "cmd /c if @isdir==TRUE echo @path" > 符合条件的文件夹列表.txt
各参数对应逻辑:
/S:递归遍历所有嵌套层级的子目录,和原dir /s的作用完全一致/D +04/12/2021:筛选最后修改时间在2021年4月12日及之后的条目,和提到的forfiles日期规则一致;如果要筛选该日期之前修改的条目,把+换成-即可/C "cmd /c if @isdir==TRUE echo @path":逐条目做判断,只保留类型为文件夹的内容,输出时只打印文件夹的完整路径,无多余信息- 末尾的
> 符合条件的文件夹列表.txt:把所有输出重定向到当前目录下的TXT文件,和原dir > yourfile.txt的导出逻辑完全一致
方案2:PowerShell实现(不受系统日期格式影响,无乱码问题)
如果使用forfiles时出现日期识别错误、中文路径导出乱码的问题,可以用Windows自带的PowerShell实现,对区域设置的兼容性更好:
Get-ChildItem -Path "C:\Users\你的用户名\Downloads" -Directory -Recurse | Where-Object { $_.LastWriteTime -ge (Get-Date "2021-04-12") } | Select-Object -ExpandProperty FullName | Out-File "符合条件的文件夹列表.txt" -Encoding utf8
各参数对应逻辑:
-Directory:枚举阶段直接过滤掉所有普通文件,只保留文件夹类型-Recurse:递归遍历所有层级的子文件夹Where-Object:精准筛选最后修改时间大于等于2021年4月12日的文件夹,日期格式可固定为ISO格式,不会受系统短日期格式干扰Select-Object -ExpandProperty FullName:输出纯文件夹完整路径,不带多余的属性信息Out-File:导出到指定TXT文件,可强制指定UTF8编码,避免中文路径乱码
常见注意事项
- 使用forfiles时,日期格式必须和当前系统的短日期显示规则匹配,比如中文Windows默认短日期为
YYYY/MM/DD时,就把参数里的日期写成/D +2021/04/12,硬套英文格式的MM/DD/YYYY会出现筛选结果不符合预期的问题 - 上述两种方案的输出效果和
dir /b的裸路径输出完全一致,不会出现原dir命令默认带的卷标统计、表头、文件大小这类冗余信息 - 如果需要保留原
dir /s /b /o:gn命令“文件夹优先、按名称排序”的效果,只需要把PowerShell里的查询结果,在管道最后加个Sort-Object FullName的排序参数即可
内容的提问来源于stack exchange,提问作者Joshua
相关产品推荐
相关产品推荐

