Powershell |删除Zip存档中的文件夹和内容



我在网上搜索了一段时间,几乎以为我有了解决方案,但没有

我需要更新Zip文件中的内容,而无需每次重新压缩整个Zip文件。我知道如何毫无问题地更新我的Zip,我可以添加东西,但不能删除它们。具体来说,我可以删除文件,但不能删除包含文件的文件夹我认为更新Zip中的文件夹会覆盖其所有内容,删除不再存在的内容,但不会,这只会添加新内容。

这是我写的函数:

function RetraitElemZip
{
param ([string]$Zip, [string]$Cible)
if (Test-Path -Path $Zip -PathType Leaf)
{
$LecteurZip = [io.compression.zipfile]::Open($Zip,'Update')
$Recherche = $LecteurZip.Entries | Where-Object { $_.fullname -match $Cible}
if ($Recherche.Count -lt 1)
{ Write-Host("Impossible de retirer l'élément < $Cible > de < $Zip > !!") }
else
{
foreach ($e in $Recherche)
{ $e.Delete() }
}
$LecteurZip.Dispose()
}
else
{ Write-Host("Le Fichier Zip < $Zip > n'est pas valide !!") }
}

但搜索似乎找不到任何匹配的条目,我用有效地址进行了测试,但没有成功。

因此,我的问题如下:我的代码中的错误在哪里?如何删除Zip文件中的文件夹及其所有内容?或者,如何更新Zip文件中的文件夹以删除不再存在的项目。

提前感谢您的回答。

我很接近答案,最终找到了。。。我只需要更详细地研究regex。问题出在"\"因为它们是一个逃跑的角色(我以为是"`"(,所以我不得不复制它们。

这是我修正的函数:

function RetraitElemZip
{
param ([string]$Zip, [string]$Cible)
if (Test-Path -Path $Zip -PathType Leaf)
{
# doubler les "" dans le chemin car ce sont des caractères d'échapements
$Temp = $Cible.Split("")
$Cible = $Temp[0]
for ($i = 1; $i -lt $Temp.Count; ++$i)
{ $Cible += "\{0}" -f $Temp[$i] }
$LecteurZip = [io.compression.zipfile]::Open($Zip,'Update')
$Recherche = $LecteurZip.Entries | Where-Object { $_.fullname -match $Cible}
if ($Recherche.Count -lt 1)
{ Write-Host("Impossible de retirer l'élément < $Cible > de < $Zip > !!") }
else
{
foreach ($e in $Recherche)
{ $e.Delete() }
}
$LecteurZip.Dispose()
}
else
{ Write-Host("Le Fichier Zip < $Zip > n'est pas valide !!") }
}

最新更新