Copy-Item

將項目從某個位置複製到另一個位置。

Syntax

Copy-Item
    [-Path] <String[]>
    [[-Destination] <String>]
    [-Container]
    [-Force]
    [-Filter <String>]
    [-Include <String[]>]
    [-Exclude <String[]>]
    [-Recurse]
    [-PassThru]
    [-Credential <PSCredential>]
    [-WhatIf]
    [-Confirm]
    [-FromSession <PSSession>]
    [-ToSession <PSSession>]
    [<CommonParameters>]
Copy-Item
    -LiteralPath <String[]>
    [[-Destination] <String>]
    [-Container]
    [-Force]
    [-Filter <String>]
    [-Include <String[]>]
    [-Exclude <String[]>]
    [-Recurse]
    [-PassThru]
    [-Credential <PSCredential>]
    [-WhatIf]
    [-Confirm]
    [-FromSession <PSSession>]
    [-ToSession <PSSession>]
    [<CommonParameters>]

Description

Cmdlet 會將 Copy-Item 專案從某個位置複製到相同命名空間中的另一個位置。 例如,它可以將檔案複製到資料夾,但無法將檔案複製到證書磁碟機。

此 Cmdlet 不會剪下或刪除要複製的專案。 Cmdlet 可以複製的特定專案取決於公開專案的 PowerShell 提供者。 例如,它可以複製檔案系統磁片磁碟機中的檔案和目錄,以及登錄磁片磁碟機中的登錄機碼和專案。

此 Cmdlet 可以複製和重新命名相同命令中的專案。 若要重新命名專案,請在 Destination 參數的值中輸入新名稱。 若要重新命名專案,而不復制該專案,請使用 Rename-Item Cmdlet。

範例

範例 1:將檔案複製到指定的目錄

此範例會將 mar1604.log.txt 檔案 C:\Presentation 複製到 目錄。 不會刪除原始檔案。

Copy-Item "C:\Wabash\Logfiles\mar1604.log.txt" -Destination "C:\Presentation"

範例 2:將目錄內容複寫到現有的目錄

本範例會將目錄的內容 C:\Logfiles 複製到現有的 C:\Drawings 目錄中。 Logfiles不會複製目錄。

Logfiles如果目錄包含子目錄中的檔案,這些子目錄會完整複製其檔案樹狀結構。 根據預設, Container 參數會設定為 True,以保留目錄結構。

Copy-Item -Path "C:\Logfiles\*" -Destination "C:\Drawings" -Recurse

注意

如果您需要在 Logfiles 複本中包含目錄,請從Path中移除 \* 。 例如:

Copy-Item -Path "C:\Logfiles" -Destination "C:\Drawings" -Recurse

如果路徑 C:\Drawings 不存在,Cmdlet 會將資料夾中的所有檔案 Logfiles 複製到單一檔案 C:\Drawings

範例 3:將目錄和內容複寫到新目錄

此範例會複製來原始目錄的內容 C:\Logfiles ,並建立新的目的地目錄。 新的目的地目錄會在 \LogsC:\Drawings 建立。

若要包含來原始目錄的名稱,請複製到現有的目的地目錄,如 範例 2所示。 或者,將新的目的地目錄命名為與來原始目錄相同。

Copy-Item -Path "C:\Logfiles" -Destination "C:\Drawings\Logs" -Recurse

注意

如果 Path 包含 \* ,則會將所有目錄的檔案內容,包括子目錄樹狀結構複製到新的目的地目錄。 例如:

Copy-Item -Path "C:\Logfiles\*" -Destination "C:\Drawings\Logs" -Recurse

範例 4:將檔案複製到指定的目錄,並重新命名檔案

此範例會 Copy-Item 使用 Cmdlet,將腳本從 \\Server01\Share 目錄 \\Server12\ScriptArchive 複製到 Get-Widget.ps1 目錄。 在複製作業中,命令會將專案名稱從 Get-Widget.ps1 變更為 Get-Widget.ps1.txt ,以便附加至電子郵件訊息。

Copy-Item "\\Server01\Share\Get-Widget.ps1" -Destination "\\Server12\ScriptArchive\Get-Widget.ps1.txt"

範例 5:將檔案複製到遠端電腦

會話會建立至名為 Server01 且認證 Contoso\User01 為 的遠端電腦,並將結果儲存在名為 $Session 的變數中。

Cmdlet 會 Copy-Itemtest.log 使用儲存在 變數中的 $Session 會話資訊,從 D:\Folder001 資料夾複製到 C:\Folder001_Copy 遠端電腦上的資料夾。 不會刪除原始檔案。

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "D:\Folder001\test.log" -Destination "C:\Folder001_Copy\" -ToSession $Session

範例 6:將資料夾複製到遠端電腦

會話會建立至名為 Server01 且認證 Contoso\User01 為 的遠端電腦,並將結果儲存在名為 $Session 的變數中。

Cmdlet 會 Copy-Item 使用儲存在 變數中的 $Session 會話資訊,將 D:\Folder002 資料夾 C:\Folder002_Copy 複製到遠端電腦上的目錄。 如果沒有使用 Recurse 參數,就不會複製任何子資料夾或檔案。 如果資料夾不存在, Folder002_Copy 作業就會建立資料夾。

$Session = New-PSSession -ComputerName "Server02" -Credential "Contoso\User01"
Copy-Item "D:\Folder002\" -Destination "C:\Folder002_Copy\" -ToSession $Session

範例 7:遞迴地將資料夾的整個內容複寫到遠端電腦

會話會建立至名為 Server01 且認證 Contoso\User01 為 的遠端電腦,並將結果儲存在名為 $Session 的變數中。

Cmdlet Copy-Item 會使用儲存在 $Session 變數中的會話資訊,將整個內容從 D:\Folder003 資料夾複製到 C:\Folder003_Copy 遠端電腦上的目錄。 子資料夾會與其檔案樹狀結構一起複製。 如果資料夾不存在, Folder003_Copy 作業就會建立資料夾。

$Session = New-PSSession -ComputerName "Server04" -Credential "Contoso\User01"
Copy-Item "D:\Folder003\" -Destination "C:\Folder003_Copy\" -ToSession $Session -Recurse

範例 8:將檔案複製到遠端電腦,然後重新命名檔案

會話會建立至名為 Server01 且認證 Contoso\User01 為 的遠端電腦,並將結果儲存在名為 $Session 的變數中。

Cmdlet 會 Copy-Itemscriptingexample.ps1 使用儲存在 變數中的 $Session 會話資訊,從 D:\Folder004 資料夾複製到 C:\Folder004_Copy 遠端電腦上的資料夾。 在複製作業中,命令會將專案名稱從 scriptingexample.ps1 變更為 scriptingexample_copy.ps1 ,以便附加至電子郵件訊息。 不會刪除原始檔案。

$Session = New-PSSession -ComputerName "Server04" -Credential "Contoso\User01"
Copy-Item "D:\Folder004\scriptingexample.ps1" -Destination "C:\Folder004_Copy\scriptingexample_copy.ps1" -ToSession $Session

範例 9:將遠端檔案複製到本機電腦

會話會建立至名為 Server01 且認證 Contoso\User01 為 的遠端電腦,並將結果儲存在名為 $Session 的變數中。

Cmdlet 會 Copy-Itemtest.log 使用儲存在 變數中的 $Session 會話資訊,從遠端 C:\MyRemoteData\ 複製到本機 D:\MyLocalData 資料夾。 不會刪除原始檔案。

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\test.log" -Destination "D:\MyLocalData\" -FromSession $Session

範例 10:將遠端資料夾的整個內容複寫到本機電腦

會話會建立至名為 Server01 且認證 Contoso\User01 為 的遠端電腦,並將結果儲存在名為 $Session 的變數中。

Cmdlet Copy-Item 會使用儲存在 變數中的 $Session 會話資訊,將遠端 C:\MyRemoteData\scripts 資料夾的整個內容複寫到本機 D:\MyLocalData 資料夾。 如果 scripts 資料夾包含子資料夾中的檔案,這些子資料夾會隨著檔案樹狀結構完整複製。

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\scripts" -Destination "D:\MyLocalData\" -FromSession $Session

範例 11:以遞迴方式將遠端資料夾的整個內容複寫到本機電腦

會話會建立至名為 Server01 且認證 Contoso\User01 為 的遠端電腦,並將結果儲存在名為 $Session 的變數中。

Cmdlet Copy-Item 會使用儲存在 變數中的 $Session 會話資訊,將遠端 C:\MyRemoteData\scripts 資料夾的整個內容複寫到本機 D:\MyLocalData\scripts 資料夾。 因為使用 Recurse 參數,所以如果腳本資料夾不存在,作業就會建立腳本資料夾。 如果 scripts 資料夾包含子資料夾中的檔案,這些子資料夾會隨著檔案樹狀結構完整複製。

$Session = New-PSSession -ComputerName "Server01" -Credential "Contoso\User01"
Copy-Item "C:\MyRemoteData\scripts" -Destination "D:\MyLocalData\scripts" -FromSession $Session -Recurse

範例 12:以遞迴方式將檔案從資料夾樹狀結構複製到目前資料夾

此範例示範如何將檔案從多層級資料夾結構複製到單一一一般檔案夾。 前三個命令會顯示現有的資料夾結構和兩個檔案的內容,這兩個檔案的名稱 file3.txt 都是 。

PS C:\temp\test> (Get-ChildItem C:\temp\tree -Recurse).FullName
C:\temp\tree\subfolder
C:\temp\tree\file1.txt
C:\temp\tree\file2.txt
C:\temp\tree\file3.txt
C:\temp\tree\subfolder\file3.txt
C:\temp\tree\subfolder\file4.txt
C:\temp\tree\subfolder\file5.txt

PS C:\temp\test> Get-Content C:\temp\tree\file3.txt
This is file3.txt in the root folder

PS C:\temp\test> Get-Content C:\temp\tree\subfolder\file3.txt
This is file3.txt in the subfolder

PS C:\temp\test> Copy-Item -Path C:\temp\tree -Filter *.txt -Recurse -Container:$false
PS C:\temp\test> (Get-ChildItem . -Recurse).FullName
C:\temp\test\subfolder
C:\temp\test\file1.txt
C:\temp\test\file2.txt
C:\temp\test\file3.txt
C:\temp\test\file4.txt
C:\temp\test\file5.txt

PS C:\temp\test> Get-Content .\file3.txt
This is file3.txt in the subfolder

Cmdlet Copy-Item 已將 Container 參數設定為 $false 。 這會導致複製來源資料夾的內容,但不會保留資料夾結構。 請注意,目的地資料夾中會覆寫同名的檔案。

範例 13:使用篩選來複製專案而不遞迴

此範例會使用 Include 參數來顯示結果,以選取應該複製的專案。

此範例使用包含要複製之檔案的下列資料夾結構:

  • D:\temp\tree\example.ps1
  • D:\temp\tree\example.txt
  • D:\temp\tree\examples\
  • D:\temp\tree\examples\example_1.txt
  • D:\temp\tree\examples\example_2.txt
  • D:\temp\tree\examples\subfolder\
  • D:\temp\tree\examples\subfolder\test.txt

在此範例中, Copy-Item 會使用 PathInclude 參數的萬用字元來呼叫 。 指定 Path 參數的萬用字元可確保它會處理符合 D:\temp\tree\* 的所有檔案和資料夾。 Include參數會篩選要處理的專案清單,將作業限制為只有以 開頭 ex 的路徑。

PS D:\temp\test\out> Copy-Item -Path D:\temp\tree\* -Include ex*
PS D:\temp\test\out> (Get-ChildItem -Recurse).FullName
D:\temp\out\examples
D:\temp\out\example.ps1
D:\temp\out\example.txt

Include參數會套用至資料夾的內容 D:\temp\tree ,以複製符合 ex* 的所有專案。 請注意,如果沒有遞迴,則會 D:\temp\out\examples 複製資料夾,但不會複製其內容。

範例 15:使用篩選來複製具有遞迴的專案

此範例會使用 Include 參數來顯示結果,以選取應該複製的專案。

此範例使用包含要複製之檔案的下列資料夾結構:

  • D:\temp\tree\example.ps1
  • D:\temp\tree\example.txt
  • D:\temp\tree\examples\
  • D:\temp\tree\examples\example_1.txt
  • D:\temp\tree\examples\example_2.txt
  • D:\temp\tree\examples\subfolder\
  • D:\temp\tree\examples\subfolder\test.txt

在此範例中, Copy-Item 會使用 PathInclude 參數的萬用字元來呼叫 。 指定 Path 參數的萬用字元可確保它會處理符合 D:\temp\tree\* 的所有檔案和資料夾。 Include參數會篩選要處理的專案清單,將作業限制為只有以 開頭 ex 的路徑。

D:\temp\out> Copy-Item -Path D:\temp\tree\* -Include ex* -Recurse
D:\temp\out> (Get-ChildItem -Recurse).FullName
D:\temp\out\examples
D:\temp\out\example.ps1
D:\temp\out\example.txt
D:\temp\out\examples\subfolder
D:\temp\out\examples\example_1.txt
D:\temp\out\examples\example_2.txt
D:\temp\out\examples\subfolder\test.txt

Include參數會套用至資料夾的內容 D:\temp\tree ,以複製符合 ex* 的所有專案。 請注意,使用遞迴,資料夾 D:\temp\out\examples 會連同所有檔案和子資料夾一起複製。 此複本包含 不符合 include 篩選準則的檔案。 使用 Copy-Item 時,篩選準則只會套用至 Path 參數所指定的最上層。 然後,遞迴會套用至符合的專案。

注意

Exclude參數的行為與本範例中所述的行為相同,不同之處在于它只會將作業限制為不符合模式的路徑。

範例 15:限制檔案以遞迴方式從萬用字元指定的路徑複製

此範例示範如何限制從萬用字元比對路徑遞迴複製到另一個資料夾的檔案。 範例 13 顯示,因為 Include 參數只會篩選針對萬用字元指定 Path解析的路徑, 所以 Include 參數無法用來限制從資料夾遞迴複製的檔案。 相反地,您可以使用 Get-ChildItem 來尋找您想要複製的專案,並將這些專案傳遞至 Copy-Item

此範例使用包含要複製之檔案的下列資料夾結構:

  • D:\temp\tree\example.ps1
  • D:\temp\tree\example.txt
  • D:\temp\tree\examples\
  • D:\temp\tree\examples\example_1.txt
  • D:\temp\tree\examples\example_2.txt
  • D:\temp\tree\examples\subfolder\
  • D:\temp\tree\examples\subfolder\test.txt

若要複製以 開頭 ex* 的所有專案,請使用 Get-ChildItemRecurseFilter 參數,並將結果傳送至 Copy-Item

D:\temp\out> Get-ChildItem -Path D:\temp\tree -Recurse -Filter ex* | Copy-Item
D:\temp\out> (Get-ChildItem -Recurse).FullName
D:\temp\out\examples
D:\temp\out\example_1.txt
D:\temp\out\example_2.txt
D:\temp\out\example.ps1
D:\temp\out\example.txt

不同于 , Copy-ItemFilter 參數 Get-ChildItem 會套用至遞迴期間探索到的專案。 這可讓您以遞迴方式尋找、篩選及複製專案。

參數

-Confirm

在執行 Cmdlet 前提示您確認。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Container

指出此 Cmdlet 會在複製作業期間保留容器物件。 根據預設, Container 參數會設定為 True

Type:SwitchParameter
Position:Named
Default value:True
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

注意

任何與 PowerShell 一起安裝的提供者都不支援此參數。 若要在執行此 Cmdlet 時模擬其他使用者,或提高您的認證,請使用 Invoke-Command

Type:PSCredential
Position:Named
Default value:Current user
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Destination

指定新位置的路徑。 預設值是目前的目錄。

若要重新命名要複製的專案,請在 Destination 參數的值中指定新的名稱。

Type:String
Position:1
Default value:Current directory
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Exclude

指定一或多個路徑專案或模式,例如 "*.txt" ,以限制此 Cmdlet 的作業。 此參數的值會根據 Path 參數的萬用字元比對結果進行篩選,而不是最終結果。 只有在以一或多個萬用字元指定 Path 時,這個參數才有效。 因為此參數只會篩選 針對 Path 參數解析的路徑,所以不會篩選使用 Recurse 參數遞迴子資料夾時發現的任何專案。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Filter

指定篩選準則以限定 Path 參數。 FileSystem提供者是唯一支援使用篩選器的已安裝 PowerShell 提供者。 您可以在about_Wildcards中找到FileSystem篩選語言的語法。 篩選比其他參數更有效率,因為提供者會在 Cmdlet 取得物件時套用它們,而不是在擷取物件之後讓 PowerShell 篩選物件。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Force

指出此 Cmdlet 會複製無法變更的專案,例如透過唯讀檔案或別名複製。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FromSession

指定要從中複製遠端檔案的 PSSession 物件。 當您使用此參數時, PathLiteralPath 參數會參考遠端電腦上的本機路徑。

Type:PSSession
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Include

指定一或多個路徑專案或模式,例如 "*.txt" ,以限制此 Cmdlet 的作業。 此參數的值會根據 Path 參數的萬用字元比對結果進行篩選,而不是最終結果。 只有在以一或多個萬用字元指定 Path 時,這個參數才有效。 因為此參數只會篩選 針對 Path 參數解析的路徑,所以不會篩選使用 Recurse 參數遞迴子資料夾時發現的任何專案。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-LiteralPath

指定一個或多個位置的路徑。 LiteralPath的值會與類型完全相同使用。 沒有字元會被視為萬用字元。 如果路徑包含逸出字元,請將它括在單引號中。 單引號會指示 PowerShell 不要將任何字元解譯為逸出序列。

如需詳細資訊,請參閱 about_Quoting_Rules

Type:String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-PassThru

傳回 物件,表示您正在使用的專案。 根據預設,此 Cmdlet 不會產生任何輸出。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

指定要複製之專案的路徑,以字串陣列的形式指定。 允許使用萬用字元。

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-Recurse

表示此 Cmdlet 會執行遞迴複本。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ToSession

指定要複製遠端檔案的 PSSession 物件。 當您使用此參數時, Destination 參數會參考遠端電腦上的本機路徑。

Type:PSSession
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

顯示執行 Cmdlet 後會發生的情況。 不會執行此 Cmdlet。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

輸入

String

您可以使用管線將包含路徑的字串傳送至此 Cmdlet。

輸出

None or an object representing the copied item

當您使用 PassThru 參數時,這個 Cmdlet 會傳回代表複製專案的物件。 否則,此 Cmdlet 不會產生任何輸出。

備註

此 Cmdlet 是針對與任何提供者公開的資料搭配使用所設計。 若要列出工作階段中可用的提供者,請輸入 Get-PSProvider。 如需詳細資訊,請參閱 about_Providers