【问题标题】:Delete files recursively in multiple zip folders递归删除多个zip文件夹中的文件
【发布时间】:2015-01-18 11:43:58
【问题描述】:

我有一个文件夹,其中包含许多 zip 文件夹,在压缩文件夹内有许多包含文件的子文件夹。我需要检查每个 zip 文件中的每个文件,如果它超过两年并将其删除。我尝试了这个并使用硬编码路径对其进行了测试。但是我以后可能不知道每个 zip 文件的名称,我需要能够查看所有 zip 文件夹。

# The two parameters. 
param([string]$limit, [string]$path) 

$stream = New-Object IO.FileStream($path, [IO.FileMode]::Open)
$mode   = [IO.Compression.ZipArchiveMode]::Update
$zip    = New-Object IO.Compression.ZipArchive($stream, $mode)

($zip.Entries | ? { !$_.PSIsContainer -and $_.CreationTime -lt $limit }) | % { $_.Delete() }

$zip.Dispose()
$stream.Close()
$stream.Dispose 

任何人对我如何解决这个问题有任何想法吗?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    此脚本将在根文件夹中查找所有以扩展名 zip" 结尾的文件。将根文件夹(所有 zip 所在的位置)作为 $path 变量传入。

    param([string]$limit, [string]$path)
    
    $zips = Get-ChildItem -Path $path -recurse *.zip
    
    foreach ($zipfile in $zips) {
        $stream = New-Object IO.FileStream($zipfile.FullName, [IO.FileMode]::Open)
        $mode   = [IO.Compression.ZipArchiveMode]::Update
        $zip    = New-Object IO.Compression.ZipArchive($stream, $mode)
    
        ($zip.Entries | ? { !$_.PSIsContainer -and $_.CreationTime -lt $limit }) | % { $_.Delete() }
    
        $zip.Dispose()     # <- probably don't need this
        $stream.Close()
    }
    

    【讨论】:

    • 谢谢,我知道它会进入每个文件夹,我唯一的问题是它正在删除所有内容。
    • 我误解了这个问题吗?我以为你有 zip 修改部分工作,只需要递归地找到 zip 文件。我很难理解您需要在 zip 中完成什么以及需要在文件系统中完成什么。
    • 是的,您的代码运行良好,允许我访问每个文件。但是,!$_.PSIsContainer -and $_.CreationTime -lt $limit 这一行似乎正在删除所有内容,而不仅仅是超过 x 天的文件。
    • 我无法测试。我不知道您为 IO.Compression.ZipArchive 使用的程序集。您可以更新问题以包含该问题吗?还是作为一个单独的问题提出?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2012-11-19
    • 1970-01-01
    • 2019-07-02
    • 2014-06-21
    • 1970-01-01
    相关资源
    最近更新 更多