如何编写脚本批量删除各子文件夹下帧序列的前5个文件
PowerShell 批处理脚本方案
以下两个场景的脚本均基于Windows PowerShell 5.1及以上版本运行,运行前请先完整备份所有帧文件避免数据丢失。
场景1:已将帧按245个/组拆分到不同文件夹,需删除每个文件夹内前5帧
实现逻辑:遍历所有分组子文件夹,对每个文件夹内的帧按文件名排序后删除前5个文件。
# 替换为你存放所有分组文件夹的根路径 $groupRoot = "C:\your\grouped\frames\path" Get-ChildItem -Path $groupRoot -Directory | ForEach-Object { # 按文件名排序后取前5项删除,如需调整排序规则可修改Sort-Object参数 Get-ChildItem -Path $_.FullName -File | Sort-Object Name | Select-Object -First 5 | Remove-Item -Force }
测试方法:先将
Remove-Item -Force替换为ForEach-Object {Write-Host "待删除:"$_.FullName},确认输出的待删除文件列表无误后再执行删除操作。
场景2:分文件夹前按「删除5个、跳过240个、再删除5个」规则批量处理
实现逻辑:将所有未分组的帧按文件名排序后,以245个文件为一个处理块,每个块删除前5个文件,保留后240个文件,循环处理所有帧。
# 替换为你存放未分组帧的根路径 $rawFrameRoot = "C:\your\raw\frames\path" $blockSize = 245 $deleteCountPerBlock = 5 # 读取所有帧并按文件名排序 $allFrames = Get-ChildItem -Path $rawFrameRoot -File | Sort-Object Name for ($i = 0; $i -lt $allFrames.Count; $i += $blockSize) { # 取当前块的前N个文件删除 $allFrames | Select-Object -Skip $i -First $deleteCountPerBlock | Remove-Item -Force }
注意事项
- 如果你的帧文件命名存在补零位数不一致、带自定义前缀等情况,导致默认文件名排序不符合帧序列顺序,需要自行调整
Sort-Object的逻辑,提取文件名中的数字序号进行排序 - 所有删除操作不可逆,执行前务必做好文件备份,优先使用测试逻辑验证待删除列表的正确性
内容的提问来源于stack exchange,提问作者XXIV
相关产品推荐
相关产品推荐

