2016-09-02 60 views
0

我想爲我們的構建服務器(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或其他任何東西。只想壓縮源代碼。

+1

您使用哪個版本的PS。 PS 5本地支持使用compress-archive和expand-archive cmdlet進行zip歸檔。 – autosvet

+0

是的,我使用PS 5(Windows 10,還沒有1607)。除了命令,compress-archive是否有用? – ecth

回答

0

在超級用戶看到這個問題: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 

...可能需要調整,但應該給你一個好的開始。

+0

我看到類似這樣的命令,但它們不起作用,但稍後我會試一試,並將其標記爲解決方案,如果它有效。謝謝! – ecth

+1

這工作:''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)。奇蹟般有效。謝謝 :) – ecth

相關問題