如何在powershell中列出zip中的文件?

xxhby3vn  于 2023-11-18  发布在  Shell
关注(0)|答案(5)|浏览(170)

我是powershell的新手,希望列出所有的文件,包含在一个目录中的zip文件。我不想使用任何第三方工具。

Structure of the directory is
mydir > dir
a.zip
b.zip
c.zip

with each file containing files named 1.txt or 2.txt or 3.txt

I am trying to get an output in the form

a.zip:1.txt
a.zip:2.txt
b.zip:files\3.txt
b.zip:4.txt
c.zip:1.txt
d.zip:10.txt

字符串

不幸的是,我的环境不是4.5,而是4.0。我能够写了这段代码,但它仍然需要大量的解析清理,因为解压缩提供了很多额外的信息。

$packagedir="C:\Packages"
$unzipcmd = "c:\bins\unzip.exe -l"
$unmatchstr = "*Archive*"
pushd .
cd $packagedir

$filelist= Get-ChildItem -Recurse | Select-Object -ExpandProperty FullName

 foreach ($item in $filelist) 
 {$ziplist = Invoke-Expression "$unzipcmd $item"; 
 foreach ($item2 in $ziplist) 
  {
   if ($item2.Contains("Archive") )
   {

   }
   else
   {
     echo $item "::" $item2}} 
   }
popd


在unzip -l输出中有很多额外的信息,比如列标题、分隔符、日期和每个文件名之前的其他日期。

m0rkklqb

m0rkklqb1#

在.NET Framework 4.5中,有一个ZipFile类非常方便。
要列出归档文件中的条目,您可以在PowerShell中像这样使用它:

[Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[IO.Compression.ZipFile]::OpenRead($sourceFile).Entries

字符串

**更新:**这似乎做的伎俩:]

[Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')

foreach($sourceFile in (Get-ChildItem -filter '*.zip'))
{
    [IO.Compression.ZipFile]::OpenRead($sourceFile.FullName).Entries.FullName |
        %{ "$sourcefile`:$_" }
}

lfapxunr

lfapxunr2#

如果你有PowerShell Community Extensions,你可以使用它的Read-Archive小程序。

hgtggwj0

hgtggwj03#

我也有这个问题!我精心制作了这个PS脚本基于这个真棒脚本:https://gallery.technet.microsoft.com/scriptcenter/PowerShell-Get-Specific-9b35352f
它所做的只是简单地列出所有的“txt”文件沿着与zip文件找到!
原始脚本将文件复制到指定的目录中--这也是非常有用的。
一些注解:
您必须定义静态变量确保目录变量都不包含最后的反斜杠,即“目录”和NOT“目录/”
这就是:

#----------------------------------------------------
# STATIC VARIABLES 
#----------------------------------------------------

$search  = "txt"
$zips   = "C:\zipfiles" 

#----------------------------------------------------
Function GetZipFileItems 
{ 
    Param([string]$zip) 

    $split = $split.Split(".")

    $shell   = New-Object -Com Shell.Application 
    $zipItem = $shell.NameSpace($zip) 
    $items   = $zipItem.Items() 

    GetZipFileItemsRecursive $items
}

Function GetZipFileItemsRecursive 
{     
    Param([object]$items) 
    ForEach($item In $items) 
    {
        $strItem = [string]$item.Name 
        If ($strItem -Like "*$search*")
        { 
            Write-Host "The txt files in the zips are : $strItem"   
        }
    }
}

Function GetZipFiles 
{ 
    $zipFiles = Get-ChildItem -Path $zips -Recurse -Filter "*.zip" | % { $_.DirectoryName + "\$_" } 

    ForEach ($zipFile In $zipFiles) 
    { 
        $split = $zipFile.Split("\")[-1] 
        Write-Host "Found zip-file : $split" 
        GetZipFileItems $zipFile 
    } 
}
GetZipFiles

字符串

bqucvtff

bqucvtff4#

我不知道第三方是怎么样的,但是你可以使用C:\Windows\System32\tar.exe。旧版本的Windows没有它。在Linux发行版中,这个实用程序的工作方式不同。也许它不是脚本的最佳选择,但是你可以方便地在shell中使用它。

PS C:\> where.exe tar.exe
C:\Windows\System32\tar.exe

个字符
-tf中,t代表“list”,f代表“file”。执行tar.exe --help了解更多。

gcxthw6b

gcxthw6b5#

使用PSCompression Module,您可以使用Get-ZipEntry列出zip条目。该模块还附带了一组小工具来管理Zip和Gzip存档。

PS ..\pwsh> Get-ZipEntry .\test.zip -Include docs/en-us*

   Directory: docs/en-US/

EntryType               LastWriteTime  CompressedSize            Size EntryName
---------               -------------  --------------            ---- ---------
Directory          5/30/2023 12:34 AM         0.00  B         0.00  B
Archive            5/30/2023 12:32 AM         1.92 KB         7.58 KB Compress-GzipArchive.md
Archive            5/30/2023 12:33 AM         1.99 KB         7.26 KB Compress-ZipArchive.md
Archive            5/30/2023 12:32 AM         1.02 KB         2.52 KB ConvertFrom-GzipString.md
Archive            5/30/2023 12:32 AM         1.53 KB         4.36 KB ConvertTo-GzipString.md
Archive            5/30/2023 12:32 AM         1.47 KB         4.77 KB Expand-GzipArchive.md
Archive            5/30/2023 12:13 PM         1.20 KB         3.89 KB Expand-ZipEntry.md
Archive            5/31/2023 10:54 AM         1.02 KB         3.29 KB Get-ZipEntry.md
Archive            5/29/2023  3:49 PM       800.00  B         2.69 KB Get-ZipEntryContent.md
Archive            5/29/2023  3:49 PM       736.00  B         1.83 KB New-ZipEntry.md
Archive            5/29/2023  3:11 PM       411.00  B         1.30 KB PSCompression.md
Archive            5/29/2023  3:49 PM       643.00  B         1.19 KB Remove-ZipEntry.md
Archive            5/29/2023  3:49 PM       842.00  B         2.88 KB Set-ZipEntryContent.md

字符串

相关问题