如何在Windows 10批处理中删除目标文件夹文件并保留最新50个?
Windows 10 批处理:保留指定文件夹内最新50个文件并删除其余
Forfiles 命令更适合基于时间戳的筛选,无法直接实现“保留最新N个文件”的需求,改用 dir 配合 for 循环可以实现该功能,以下是两种场景的批处理代码:
仅处理目标文件夹下的文件(不包含子文件夹)
@echo off setlocal enabledelayedexpansion :: 替换为你的目标文件夹路径 set "targetDir=C:\Images\" :: 按修改时间倒序列出文件,跳过前50个最新文件,删除剩余文件 for /f "skip=50 delims=" %%f in ('dir /b /o-d /a-d "%targetDir%"') do ( del /f /q "%targetDir%%%f" ) endlocal
代码说明:
dir /b /o-d /a-d "%targetDir%":仅列出目标文件夹下的文件(排除文件夹),并按修改时间倒序排列(最新文件排在最前)skip=50:跳过列表中的前50个文件(保留最新的50个)del /f /q:强制删除文件,且不弹出确认提示
处理目标文件夹及所有子文件夹的文件
如果需要递归处理子文件夹中的文件,可使用以下代码:
@echo off setlocal enabledelayedexpansion :: 替换为你的目标文件夹路径 set "targetDir=C:\Images\" set "tempFile=%temp%\filelist.tmp" :: 递归收集所有文件路径到临时文件 for /r "%targetDir%" %%f in (*) do ( echo %%f >> "%tempFile%" ) :: 按修改时间倒序排序临时文件,跳过前50个最新文件,删除剩余文件 for /f "skip=50 delims=" %%f in ('sort /r "%tempFile%"') do ( del /f /q "%%f" ) :: 删除临时文件 del /f /q "%tempFile%" endlocal
代码说明:
for /r:递归遍历目标文件夹下的所有子文件夹sort /r:对临时文件中的文件路径按修改时间倒序排序(Windows 的sort命令默认按文件的最后修改时间排序)- 最后自动清理临时文件,避免残留
内容的提问来源于stack exchange,提问作者S.Zs.94
相关产品推荐
相关产品推荐

