存档超过 6 个月的文件

Archive files older than 6 months

文件夹 X 有很多子文件夹 A、B、C、D...每个子文件夹都有很多文件,我想存档这些子文件夹中超过 6 个月的所有文件。之后检查是否创建存档并删除已存档的文件。

这是我尝试过的:

#$SourceFolder = "C:\Users\sec\Desktop\X"

ForEach-Object 
{
    Get-ChildItem -Path "$($_.FullName)" -Exclude "*.zip"
    Where-Object {($_.LastWriteTime -lt (Get-Date).AddMonths(-6))} |
        Compress-Archive -DestinationPath "$($_.FullName).2020andOlder.zip" -Update;

    if (Test-Path 06.2020andOlder.zip) {
        Remove-Item -Force
    }
}

假设您希望每个子文件夹都以旧文件所在的 .zip 存档结束,试试这个:

使用 Group-Object 将同一子目录中的所有旧文件组合在一起,并使用它来创建 .zip 文件并在压缩后删除原始文件。

$SourceFolder = 'D:\Test'
$refDate      = (Get-Date).AddMonths(-6).Date  # take this from midnight

Get-ChildItem -Path $SourceFolder -File -Recurse -Exclude "*.zip" | 
    Where-Object { $_.LastWriteTime -lt $refDate } |
    Group-Object DirectoryName | ForEach-Object {
        # construct the target folder path for the zip file using the Name of each group
        $zip = Join-Path -Path $_.Name -ChildPath '06.2020andOlder.zip'
        # archive all files in the group
        Compress-Archive -Path $_.Group.FullName -DestinationPath $zip -Update

        # here is where you can delete the original files after zipping
        $_.Group | Remove-Item -WhatIf
    }

请注意,我已将开关 -WhatIf 添加到 Remove-Item cmdlet。这是一个安全开关,所以您实际上还没有删除任何东西。该 cmdlet 现在仅显示 删除的内容。一旦您对此输出感到满意,请删除 -WhatIf 开关以便删除文件。