Powershell脚本或批处理文件仅保留每个子目录中的4个最新文件

时间:2014-10-29 03:04:51

标签: powershell batch-file

我需要帮助开发脚本来执行以下操作。

我在我的c:\ recorded tv文件夹中的子目录中记录了我的电视.WTV文件。 例如: c:\录制电视\黑名单\ c:\录制电视\蝙蝠侠\ 等

我想要一个脚本,我可以通过任务调度程序安排删除相应子目录中的旧wtv文件,并根据记录的日期将4个最新的wtv文件保存在各自的子目录中。

这可能吗?

2 个答案:

答案 0 :(得分:0)

根据Keep x number of files and delete all others - Powershell

上类似的SO帖子改编了以下解决方案
$path = "c:\recorded tv"
$keep = 4

$subdirs = Get-ChildItem -Path $path | ?{ $_.PSIsContainer } | select-object FullName
foreach ($dir in $subdirs) {
    $files = Get-ChildItem -Path $dir.FullName | ?{-not $_.PsIsContainer}
    if ($files.Count -gt $keep) {
        $files | Sort-Object CreationTime | Select-Object -First ($files.Count - $keep) | Remove-Item -Force
    }
}

答案 1 :(得分:0)

批量解决方案

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "root=c:\recorded tv"
    set "fileType=.wtv"
    set "keep=4"

    for /d %%d in ("%root%\*") do for /f "skip=%keep% delims=" %%a in (
        'dir /b /o-d /a-d "%%~fd\*%fileType%"'
    ) do echo del "%%~fd\%%~a"

代码执行两个for循环:

  • for %%d枚举指定根目录下的文件夹。

  • for %%a对正在处理的文件夹执行dir命令,以反向日期顺序检索其中的文件列表。跳过前n个文件(较新的文件),对于其余文件,执行del命令。

文件删除操作仅回显到控制台,如果输出正确,请删除前缀为echo的{​​{1}}命令