在 PowerShell 中排除資料夾的複製項目

  1. 使用 Get-Item 函數和 -Exclude 參數在 PowerShell 複製操作中排除資料夾
  2. 使用 Where-ObjectPSIsContainer 在 PowerShell 複製操作中排除資料夾
  3. 結論
在 PowerShell 中排除資料夾的複製項目

在檔案管理和自動化的 PowerShell 領域中,複製檔案的同時排除特定資料夾是一項常見但複雜的挑戰。本文深入探討了達成此任務的兩種有效方法:使用 Get-Item 函數搭配 -Exclude 參數,以及利用 Where-ObjectPSIsContainer 屬性。

這兩種方法雖然都是為了達到相同的目的,但從不同的角度處理問題,並提供獨特的優勢。

我們的目標是提供這些方法的全面理解,包括它們的應用及使用上的細微差別。通過詳細的解釋、語法分解和實用的示例,我們旨在讓新手和有經驗的 PowerShell 使用者都能掌握有效管理檔案複製任務的技能,並根據其工作流的特定要求量身定制他們的操作方法。

使用 Get-Item 函數和 -Exclude 參數在 PowerShell 複製操作中排除資料夾

我們可以使用 Copy-Item 命令在 PowerShell 中複製檔案,同時排除一個資料夾。有兩種方法可以在排除資料夾的情況下使用 Copy-Item,一種是排除單個資料夾,另一種是排除多個資料夾。

此操作的語法結合了 Copy-ItemGet-Item -Exclude:

Copy-Item -Path (Get-Item -Path "sourcePath\*" -Exclude ('folderToExclude')).FullName -Destination "destinationPath" -Recurse -Force

參數:

  • Copy-Item:此 cmdlet 將檔案和目錄複製到新位置。
  • -Path:指定要複製的項目的路徑。在我們的案例中,這是由 Get-Item 提供的。
  • Get-Item:從指定位置檢索項目。
  • -Exclude:此參數在 Get-Item 中過濾掉項目,特別是要排除的資料夾或檔案名稱。
  • ('folderToExclude'):您希望排除的資料夾名稱。
  • .FullName:檢索項目的完整路徑。
  • -Destination:要複製項目到的路徑。
  • -Recurse:包含子目錄的內容。
  • -Force:強制命令執行而不要求用戶確認。

代碼示例:

Copy-Item -Path (Get-Item -Path "origin\*" -Exclude ('SubFolder')).FullName -Destination "destination\" -Recurse -Force

在我們的腳本中,我們首先針對源目錄 (C:\origin\) 並使用 Get-Item 來檢索其包含的所有項目。這裡的星號 (*) 符號作為萬用字元,代表目錄中的每個項目。

然後我們利用 -Exclude 參數來表達我們希望排除一個特定的子資料夾,特別命名為 SubFolder。在此上下文中使用 .FullName 屬性非常重要,因為它獲取我們處理的每個項目的完整路徑。

在策劃此列表後,該列表明確排除了指定的資料夾,並交給 Copy-Item。我們將目標位置定義為目標目錄 (C:\destination)。為了確保一個全面的複製過程,涵蓋所有子目錄,除了我們選擇排除的那一個,我們加入了 -Recurse 參數。

為了進一步順利進行,避免潛在的中斷,-Force 參數開始發揮作用。它有效抑制了任何系統提示,這些提示可能會暫停操作,特別是那些與覆蓋目標目錄中現有檔案相關的提示。

origin 資料夾:

powershell 複製項目排除資料夾 - 來源檔案

輸出:

powershell 複製項目排除資料夾 - 輸出

上述命令將僅排除指定的一個資料夾。我們還可以通過將多個資料夾名稱放入 -Exclude() 來排除多個資料夾。

查看排除多個資料夾的命令:

Copy-Item -Path (Get-Item -Path "origin\*" -Exclude ('SubFolder', 'SubFolder2')).FullName -Destination "destination\" -Recurse -Force

查看輸出:

powershell copy-item 排除資料夾 - 輸出

使用 Where-ObjectPSIsContainer 在 PowerShell 複製操作中排除資料夾

PowerShell 提供了一套廣泛的 cmdlet 用於檔案和資料夾的操作,Copy-Item 是一個關鍵的複製操作工具。然而,它的原生功能並不直接支持排除資料夾。

為了達成這一點,我們結合使用 Get-ChildItemWhere-ObjectPSIsContainer 屬性。這種方法特別適用於在複製操作中需要排除資料夾的同時保留檔案。

腳本結構如下:

Get-ChildItem -Path "sourcePath\" -Recurse | Where-Object { $_.PSIsContainer -notmatch 'True' } | Copy-Item -Destination "destinationPath" -Recurse -Container

參數:

  • Get-ChildItem -Path "sourcePath\" -Recurse:從指定路徑檢索所有項目(檔案和資料夾),包括子目錄。
  • Where-Object { $_.PSIsContainer -notmatch 'True' }:過濾掉所有資料夾。PSIsContainer 是一個布林屬性,對於資料夾為 True,對於檔案為 False
  • Copy-Item -Destination "destinationPath" -Recurse -Container:將剩餘的項目(檔案)複製到目的地。-Recurse 用於確保子目錄的遍歷,而 -Container 則保留目錄結構。

代碼示例:

Get-ChildItem -Path "origin\" -Recurse | Where-Object { $_.PSIsContainer -notmatch 'True' } | Copy-Item -Destination "destination\" -Recurse -Container

在我們的腳本中,我們首先從源目錄 (origin\) 收集所有項目。為此,我們使用 Get-ChildItem cmdlet。

真正的重要部分是在 Where-Object cmdlet 中,我們引入過濾器以特定地排除資料夾。這一排除基於 $_ .PSIsContainer -notmatch 'True' 的條件。

這段代碼非常重要,因為它有效過濾收集到的項目,確保僅有檔案(而非資料夾)被傳遞到管道中。

接下來,這些過濾的檔案被交給 Copy-Item cmdlet。我們的命令是將這些檔案複製到指定的目的地 (destination\)。

這一操作的一個重要方面是,它在排除資料夾本身的同時如何保留目的地的原始目錄結構。這種平衡是通過在 Copy-Item 中謹慎安排 -Recurse-Container 參數來實現的,以確保檔案結構的完整性,排除了實際的資料夾。

輸出:

powershell 複製項目排除資料夾 - 輸出

結論

總之,本文中提出的技術——使用 Get-Item 搭配 -Exclude 以及 Where-ObjectPSIsContainer——提供了強大且靈活的方式來在 PowerShell 複製操作中排除資料夾。通過理解和應用這些方法,用戶可以顯著提升他們在 PowerShell 中的檔案管理和自動化能力。

Get-Item-Exclude 的方法簡單明了,對於排除特定資料夾非常有效,而 Where-ObjectPSIsContainer 方法提供了更細緻的控制,特別適用於排除準則較為複雜或動態的情況。這兩種方法展示了 PowerShell 在處理檔案和資料夾方面的多功能性和強大,使其成為系統管理員、開發人員和 IT 專業人員的重要工具。

掌握這些知識後,用戶可以自信地應對各種檔案複製任務,確保在 Windows 環境中對其檔案管理操作進行高效且精確的控制。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

相關文章 - PowerShell Copy