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

Powershell 压缩不包含二进制文件的源代码,powershell,Powershell,我想为我们的构建服务器(windows机器)编写一个脚本 其中一部分是提取二进制文件并删除所有调试文件。我已经有了密码 第二部分是获取项目的源文件(WPF)并对其进行压缩,不包括/bin/和/obj/文件夹 到目前为止,我得到的是: # # Get and zip Sourcefiles # # Get relevant folders and files [string[]]$FolderExcludes = @('*bin*', '*obj*') $Folders = Get-Child

我想为我们的构建服务器(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" $_ }
它获取所有文件并将它们放入根目录中

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

那么,在没有bin/obj文件夹和破坏zip中的文件路径的情况下,如何压缩源文件呢

顺便说一句,我尝试在构建过程之后以及将二进制文件复制到其导出文件夹之后删除文件夹,但powershell似乎保存了这些文件,因此我当时无法删除:(

一个更愚蠢的想法是复制所有这些内容并删除那里的bin和obj文件夹……但这似乎效率很低


我不需要使用7zip。我完全可以使用winzip或其他任何东西。我只想压缩源代码。

在超级用户上查看以下答案:


…可能需要调整,但应该会给您一个良好的开端。

请在超级用户上查看此答案:


…可能需要调整,但应该会给您一个良好的开端。

您使用的是哪个版本的PS。PS 5本机支持压缩存档和扩展存档cmdlet的zip存档。是的,我使用PS 5(Windows 10,尚未1607).compress archive是否除了命令之外还有其他有用的功能?您使用的是哪个版本的PS。PS 5本机支持使用compress archive和expand archive cmdlet的zip存档。是的,我使用PS 5(Windows 10,尚未1607).compress archive除了命令之外还有什么有用的吗?我看到过这样的命令,但它们不起作用。但我稍后会尝试一下,如果它起作用的话,会被标记为解决方案。谢谢!这起作用了:
sz a-mx=9“$SourcePath\$ArtifactPath.zip”。-xr!bin-xr!obj-xr!”$ArtifactPath“-xr0!”$ArtifactPath.zip.tmp“-xr0!”.git“-xr0!”.gitignore“-”-xr0!“.gitmodules”-xr0!”sonar project.properties“
它不会复制名为“obj”和“bin”的文件夹或文件,也不会复制隐藏的“.git”-文件夹或一级目录(0-flag)中的所有其他文件。工作起来很有魅力。谢谢:)我看到过这样的命令,但它们不起作用。但我稍后会尝试一下,并将其标记为解决方案,如果它起作用的话。谢谢!这起作用了:
sz a-mx=9“$SourcePath\$ArtifactPath.zip”'-xr!bin-xr!obj-xr!$ArtifactPath“-xr0!”$ArtifactPath.zip.tmp“-xr0!”.git“-xr0!”.gitignore“-”-xr0!”.gitmodules“-xr0!”.git-xr0!”.sonar-project.properties“
它不会复制具有确切名称“obj”和“bin”的文件夹或文件,也不会复制隐藏的“.git”-文件夹或一级目录中的所有其他文件(0-flag)。工作起来很有魅力。谢谢:)
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