0

我有一个必须解压缩到目标文件夹的 zip 文件。在我提取之前,我只想备份文件和将通过提取 zip 文件替换的子目录。

我可以编写一个脚本来找出 .zip 中的子目录并从目标文件夹中备份这些子目录(如果它们可用)?

我将在 Azure DevOps 中使用这个脚本。

4

2 回答 2

1

您可以使用 PowerShell 发现 zip 文件内容,检查它是否存在于目标文件夹中,如果存在 - 进行备份。例如:

$ZipFilePath = "C:\Users\sabramczyk\Documents\Scrum.zip"
$DestinationFolder = "c:\test"

Add-Type -assembly "System.IO.Compression.FileSystem"
    
if (![System.IO.File]::Exists($ZipFilePath)) {
    throw "Zip file ""$ZipFilePath"" not found."
}

$ZipContent = ([System.IO.Compression.ZipFile]::OpenRead($ZipFilePath)).Entries.FullName
foreach($zipContent in $ZipContent)
{
    if(Test-Path $DestinationFolder+"/"+$zipContent)
    {
        # Do backup
    }
}
于 2020-09-23T12:34:19.490 回答
0

最简单的方法是将文件从您的 zip 中提取到某个临时文件夹(在 Azure DevOps 上,它可能是此变量后面的文件夹Agent.TempDirectory)。然后,您可以将要备份的文件复制到另一个位置,$(Agent.TempDirectory)/backup然后打包此文件夹并放入,Build.ArtifactStagingDirectory如果您想发布它们。在此之后,您可以再次将 zip 解压缩到您的目的地,因为您已经有了备份。

如果您想了解有关上述文件夹的更多信息,您可能会发现此文档很有用。

于 2020-09-23T10:24:58.993 回答