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 文件中的文件夹以删除不再存在的项目。
预先感谢您的回答。
解决方案
我接近答案并最终找到了它......我只需要更详细地研究正则表达式。问题在于路径中的“\”,因为它们充当转义字符(我认为它是“`”)所以我不得不复制它们。
这是我更正的功能:
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 !!") }
}