2017-06-01 132 views
0

希望其他腳本編寫人員可以幫助解決這個問題:)現在,我已經在幾個小時內解決了這個問題。在PowerShell中壓縮文件夾

我想使用powershell壓縮某些文件夾。 我的文件夾結構是

備份
BoxIntranet
組件
內容
數據庫
Exec的
文件
日誌
多瀏覽
多瀏覽器\遺產\定製

ParentPortal
ParentPortal \定製
StudentPortal
StudentPortal \定製
更新
的WebDav

有很多更多的文件和文件夾在上面的每一個,但是這些是那些我主要感興趣的 我試圖在PowerShell中使用Write-Zip或Compress-Archive方法將其全部壓縮,但我的條件是。

  1. 只有內容,文件,數據庫文件夾應該從根

  2. 多瀏覽器\遺產\定製,StudentPortal \定製和ParentPortal \文件夾中的定製也應該備份拉上。

  3. 壓縮文件中的文件夾結構應該保持不變,這意味着壓縮文件的根目錄應該包含內容,文件,數據庫,多瀏覽器,ParentPortal和StudentPortal文件夾。雖然內容,文件和數據庫文件夾應該已將所有內容壓縮起來,但Multibrowser,ParentPortal和StudentPortal文件夾應該只包含指定的子目錄及其中的所有文件。

代碼:

$FilesAndInclude = @("Content", "Files", "Database", "Multibrowser\Legacy\customisation", 
        "StudentPortal\customisation", "ParentPortal\customisation", 
        "BoxIntranet\customisation") 
$FilesToExclude = @("connectionstrings.config", "inc_dbconn.asp") 
Get-ChildItem -Path "C:\Folder" -Include $FilesAndInclude -Recurse -Exclude $FilesToExclude| 
    Compress-Archive -DestinationPath "Archive.zip" 

我試過上面,如果我刪除-Include參數,然後將其拉鍊了一切但不會保留文件夾結構,但是,它沒有做任何事情。

有沒有什麼辦法可以在PowerShell內完成我的內容?

+0

「什麼都不做」是什麼意思?是否有一個或多個錯誤消息?是否創建了一個Archive.zip文件? Get-ChildItem的輸出是您預期的文件和目錄名稱? – lit

回答

1

好的,首先要說明的是,使用-Include參數很困難的原因是因爲它僅用於包含您指定的內容。因此,它會查看事物的名稱(而不是它們的路徑),並檢查列表,如果它與列表中的某項匹配,它將包含該項目。由於您只列出文件夾名稱,它只包括那些文件夾(但不包含其內容)。所以你沒有通過這種方式傳遞任何文件。爲了解決這個問題,您需要先構建文件列表,然後將其傳遞給cmdlet以進行壓縮。

下一個問題是,Compress-Archive不存儲路徑信息,所以你需要使用Write-Zip。我已經包含了我認爲您需要的cmdlet。

$FilesAndInclude = @("Content", "Files", "Database", "Multibrowser\Legacy\customisation", 
        "StudentPortal\customisation", "ParentPortal\customisation", 
        "BoxIntranet\customisation") 
$FilesToExclude = @("connectionstrings.config", "inc_dbconn.asp") 
[array]$FilesToZip = Get-ChildItem .\* -Exclude $FilesToExclude -File 
$FilesToZip += $FilesAndInclude | ForEach{Get-ChildItem .\$_ -Exclude $FilesToExclude -File} 
$FilesToZip | Write-Zip -EntryPathRoot $(Resolve-Path .\|Select -Expand Path) -OutputPath Archive.zip 
+0

你是明星。這段代碼並不完全符合我的要求,但它確實給了我一個非常好的起點。這爲我完成了這項工作:) –