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

如何批量遍历目录子文件夹,仅保留最大的*.rst文件并删除其余同类文件

需求实现方案

你原脚本存在两个问题:一是扩展名误写为.rts,和你需要匹配的.rst不符;二是仅包含输出文件名到txt的逻辑,没有按大小排序、删除冗余文件的实现。以下是两种可直接使用的解决方案:

批处理修复方案

操作前请先备份目标目录文件,避免误删。

@echo off
setlocal enabledelayedexpansion
:: 遍历C:\Temp下所有子目录
for /d %%i in ("C:\Temp\*") do (
    set "first=1"
    :: 按大小降序列出当前目录所有.rst文件,跳过最大的第一个,删除其余
    for /f "skip=1 delims=" %%j in ('dir /b /o-s /a-d "%%i\*.rst" 2^>nul') do (
        del /f /q "%%i\%%j"
    )
)
endlocal

参数说明:

  • dir /o-s:指定按文件大小从大到小排序
  • skip=1:跳过排序后的第一个结果,也就是体积最大的rst文件
  • 2>nul:避免目录下没有rst文件时抛出错误提示
  • del /f /q:强制静默删除文件,无需二次确认

测试阶段可以把del /f /q替换为echo,先预览待删除的文件列表,确认无误后再执行真实删除操作。

更简便的PowerShell方案

如果允许使用PowerShell,实现逻辑更清晰易调整:

# 遍历C:\Temp下所有子目录
Get-ChildItem -Path "C:\Temp" -Directory | ForEach-Object {
    # 获取当前目录下所有rst文件,按大小降序排序
    $rstFiles = Get-ChildItem -Path $_.FullName -Filter "*.rst" -File | Sort-Object Length -Descending
    # 文件数大于1时,删除除最大文件外的其余文件
    if ($rstFiles.Count -gt 1) {
        $rstFiles | Select-Object -Skip 1 | Remove-Item -Force
    }
}

如果后续需要保留前N个最大的rst文件,仅需修改-Skip 1里的数值即可。

内容的提问来源于stack exchange,提问作者Exi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:48:02