我想为我们的构建服务器(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:ProgramFiles7-Zip7z.exe"
$Files | %{ sz a -mx=9 "$SourcePath$ArtifactPath.zip" $_ }
它获取所有文件并将它们放在根目录下。
当我尝试压缩这些文件夹时,7zip会获取所有文件夹,包括bin和obj,以及隐藏的。git文件夹(我们不倾向于与源代码一起发布)。
那么我如何在没有bin/obj文件夹的情况下压缩源文件,并且不破坏zip中的文件路径?
顺便说一句,我试图删除文件夹,在构建过程之后,将二进制文件复制到他们的导出文件夹中,但powershell似乎保留了文件,所以我当时无法删除它:(
一个更愚蠢的想法是复制所有这些并删除那里的bin和obj文件夹。但这似乎效率很低。
我不需要使用7zip。我完全可以用winzip或其他工具。只是想压缩源代码。
查看SuperUser: https://superuser.com/a/97347/440614
set-alias sz "$env:ProgramFiles7-Zip7z.exe"
sz a -mx=9 "$SourcePath$ArtifactPath.zip" FolderToArchive -mx0 -xr!bin -xr!obj -xr!.git, -xr!sonar-project.properties
…可能需要调整,但应该给你一个良好的开端。