首页 > 解决方案 > 如何在 Powershell 中使用 Tree 压缩文件

问题描述

我希望为已经压缩的文件使用命令行脚本甚至是 python 编码脚本来实现树类型函数。我将文件刻录到光盘上,并根据工作需要完成它们。有些文件需要压缩才能传输。

使用“Tree /f /a”时,我得到了我正在寻找的文件的良好输出,但如果压缩文件在光盘上,它不会分解压缩文件中的内容。我没有看到任何其他可以生成压缩文件的树修饰符。有谁知道我可以通过管道(或帮助我在 python 或 C 中构建一个脚本)可以创建目录并在该目录中创建压缩文件?

我不擅长编码,所以请原谅我的新手编码能力。我知道 python 代码将不得不拉目录,把它树出来。当它找到一个 zip 文件来解压缩文件时,它需要一些“if”,也许还有一些“when”语句,然后将文件树化。然后继续到目录中的下一个文件,直到所有文件都被树化。

这些文件始终位于最终/已关闭的光盘上,因此我什至不确定您是否可以解压缩文件以将其树化。更别说把它拉上拉链了?任何帮助将不胜感激。谢谢!

通常我这样做是为了在光盘托盘中树出光盘,但它不会树压缩文件。我总是将树输出到 .txt 文件中以供审查和文件传输存档。

“tree /f /ad:/ > c:/filetransfer/transfer/“日期”/transfer.txt”</p>

标签: pythonpowershelltreezip

解决方案


好的,这里有一段超级基本的代码,可以在 PowerShell 中进行树形处理。它绝对可以使用一些润色来绘制 Tree 所做的所有漂亮线条,但它至少会扩展 zip 文件。

Add-Type -assembly "system.io.compression.filesystem"
Function Tree-Path($Path){
    ('  -  '*($Path.Split('\/').Count -1))+$Path.Split('\/')[-1]
}
Function Tree-ZipFile($ZipFilePath){
    $ZipFile = [io.compression.zipfile]::OpenRead($ZipFilePath)
    $ZipFile.Entries.FullName|Group {($_ -replace '/[^/]+$').TrimEnd('/')}|%{
        Tree-Path ("$ZipFilePath\"+$_.Name)
        $_.Group|Select -skip 1|%{Tree-Path "$ZipFilePath\$_"}
    }
    $ZipFile.Dispose()
}

GCI D:\ -Recurse|% -begin {$_.Parent} -process {
    If($_.Extension -eq '.zip'){
        Tree-Path $_.FullName
        Tree-ZipFile $_.FullName
    }Else{
        Tree-Path $_.FullName
    }
}

推荐阅读