压缩不包含二进制文件的源代码

时间:2016-09-02 08:22:03

标签: powershell

我想为构建服务器(windows机器)编写脚本。

一部分是提取二进制文件并删除所有调试文件。我已经有了代码。

第二部分是获取项目的源文件(WPF)并压缩它,不包括/ bin /和/ obj /文件夹。

到目前为止,我得到的是:

#
# Get and zip Sourcefiles
#

# Get relevant folders and files
[string[]]$FolderExcludes = @('*bin*', '*obj*')

$Folders = Get-ChildItem -Directory -Recurse -Exclude $FolderExcludes | %{ 
    $allowed = $true
    foreach ($exclude in $FolderExcludes) { 
        if ((Split-Path $_.FullName -Parent) -ilike $exclude) { 
            $allowed = $false
            break
        }
    }
    if ($allowed) {
        $_
    }
}

[string[]]$FileExcludes = @('*.git*', 'sonar-project.properties')

$Files = $Folders | Get-ChildItem -File | %{
    $allowed = $true

    foreach ($exclude in $FileExcludes) { 
        if ($_.Name -ilike $exclude) { 
            $allowed = $false
            break
        }
    }
    if ($allowed) {
        $_.FullName
    }
}

$Files

文件列表包含我要压缩的所有文件。但是当我做的时候

set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"
$Files | %{ sz a -mx=9 "$SourcePath\$ArtifactPath.zip" $_ }

它获取所有文件并将它们放入root。

当我尝试压缩文件夹时,7zip会获取所有文件夹,包括bin和obj,并包含隐藏的.git文件夹(我们不希望随源代码一起发布)。

那么如何在没有bin / obj文件夹的情况下压缩源文件并且不破坏压缩文件路径?

btw我尝试删除文件夹,在构建过程之后以及将二进制文件复制到其export-folder之后,但powershell似乎保存了文件,因此我当时无法删除它:(

一个更愚蠢的想法是复制所有这些并删除那里的bin和obj文件夹..但它似乎非常低效。

而且我不需要使用7zip。我对winzip或其他任何东西都很好。只是想压缩源代码。

1 个答案:

答案 0 :(得分:0)

在SuperUser上查看此答案:https://superuser.com/a/97347/440614

set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"
sz a -mx=9 "$SourcePath\$ArtifactPath.zip" FolderToArchive\ -mx0 -xr!bin -xr!obj -xr!.git, -xr!sonar-project.properties

......可能需要调整,但应该给你一个良好的开端。