用于删除特定文件夹中较旧文件的批处理脚本

时间:2019-06-24 18:41:08

标签: batch-file cmd

我正在为以下要求创建批处理文件:

根文件夹-D:\ Olderfiles \ SourceDocuments

在此根文件夹中,我们有许多文件夹和子文件夹。在每个文件夹中,我们可能有也可能没有名为“存档”的文件夹。我们需要从这些名为“存档”的文件夹中删除最近120天未更新的* .xlsx文件。

我尝试使用以下脚本,但无法正常工作。

forfiles / p“ D:\ Olderfiles \ SourceDocuments” / s / m * \ Archive \ *。xlsx / D -120 / C“ cmd / c del @path”

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

在批处理脚本中,可以使用PowerShell脚本。这使用了当前PowerShell 5的某些功能。可以对旧版本进行一些更改。如果您确信将删除正确的文件,请从“删除项” cmdlet中删除-WhatIf

=== delold.ps1

Get-ChildItem -Recurse -Directory -Path 'D:\Olderfiles\SourceDocuments' -Filter 'Archive' |
    ForEach-Object {
        Get-ChildItem -File -Path $_.FullName -Filter '*.xlsx' |
            ForEach-Object {
                if ($_.LastWriteTime -lt (Get-Date).AddDays(-120)) {
                    Remove-Item -Path $_.FullName -WhatIf
                }
            }
    }

=== delold.bat

powershell -NoLogo -NoProfile -File "delold.ps1"

答案 1 :(得分:1)

某些版本的Windows中,ForFiles日期检查中存在已知的错误。

要解决此问题,您可以使用Robocopy生成匹配文件的列表,然后使用For循环将其删除:

<PleaseWork>
    orientation: 'vertical'
    Label:
        text: str(round(root.a, 1))
    Label:
        id: count_up
        text: str(round(root.b, 1))

根据文件和子目录的数量,此文件或ForFiles可能仍需要花费相当长的时间,因为您只关心“存档”文件夹。

因此,为了加快速度,只允许使用DIR检查名为“ ARCHIVE”的目录以使其匹配,然后循环该列表以运行robocopy:

这将比Forfiles或上述循环快得多:

<PleaseWork>
    orientation: 'vertical'
    id: please_work
    Label:
        text: str(round(please_work.a, 1))
    Label:
        id: count_up
        text: str(round(please_work.b, 1))

如果您只是将其粘贴到CMD行中,则需要使用此方法,它刚刚从每个循环变量中删除了%符号:

conscrypt-openjdk-uber