ZetCode

PowerShell Copy-Item

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍PowerShell中的Copy-Item cmdlet。此cmdlet将文件和目录从一个位置复制到另一个位置。

Copy-Item基础知识

Copy-Item cmdlet将一个项从一个位置复制到另一个位置。它可以复制文件、目录和注册表项。该cmdlet会保留原始项并在目标位置创建副本。支持使用通配符复制多个项。

基本文件复制

使用Copy-Item的最简单方法是指定源和目标路径。这将一个文件复制到目标位置。目标可以是文件名或目录。如果目标是目录,文件将保留其原始名称。

copy1.ps1
Copy-Item -Path "C:\data\report.txt" -Destination "C:\backup\"

此命令将report.txt从C:\data复制到C:\backup。如果backup目录不存在,则会发生错误。文件将保留其原始名称。

复制并重命名

您可以通过在目标路径中指定新名称来在复制文件时重命名文件。这将在同一目录或不同目录中创建具有不同名称的副本。原始文件保持不变。

copy2.ps1
Copy-Item -Path "C:\data\report.txt" -Destination "C:\backup\report_backup.txt"

这会将report.txt复制到backup目录中的report_backup.txt。操作后,两个文件都将存在。目标目录必须存在。

复制多个文件

可以使用通配符复制匹配模式的多个文件。星号(*)匹配任何字符序列。这对于复制具有相似名称或扩展名的文件组很有用。

copy3.ps1
Copy-Item -Path "C:\data\*.log" -Destination "C:\backup\"

这会将C:\data中的所有.log文件复制到C:\backup。每个文件都保留其原始名称。仅复制匹配模式的文件。

递归复制目录

要复制目录及其内容,请使用-Recurse参数。这将复制所有文件和子目录。没有此参数,仅复制空目录。如果目标目录不存在,则会创建它。

copy4.ps1
Copy-Item -Path "C:\projects\" -Destination "C:\backup\projects\" -Recurse

这会将整个projects目录复制到backup位置。包含所有文件和子目录。对于大型目录,此操作可能需要一些时间。

强制覆盖

默认情况下,Copy-Item不会覆盖现有文件。使用-Force参数可以覆盖现有项。当您需要确保目标与源匹配时,这很有用。请谨慎操作,以免数据丢失。

copy5.ps1
Copy-Item -Path "C:\data\report.txt" -Destination "C:\backup\" -Force

此命令将覆盖backup目录中的report.txt(如果存在)。如果没有-Force,如果文件存在,复制将失败。原始文件保持不变。

过滤复制

您可以将Copy-Item与其他cmdlet结合使用以进行高级复制。此示例仅复制最近7天内修改过的文件。Get-ChildItem在复制之前过滤文件。管道传递过滤后的结果。

copy6.ps1
Get-ChildItem -Path "C:\data\" -File | 
Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) } |
Copy-Item -Destination "C:\backup\"

这仅复制上周修改过的文件。管道首先过滤,然后复制。这种方法对于大型目录非常有效。

复制到远程计算机

Copy-Item可以使用PowerShell远程处理将文件复制到远程计算机。-ToSession参数指定远程会话。这需要与远程计算机建立已建立的PSSession。

copy7.ps1
$session = New-PSSession -ComputerName "Server01"
Copy-Item -Path "C:\data\report.txt" -Destination "C:\backup\" -ToSession $session
Remove-PSSession $session

这会将report.txt复制到Server01的backup目录。必须先建立会话。完成后务必清理会话。

来源

PowerShell 文档

在本文中,我们已经介绍了PowerShell中的Copy-Item cmdlet。

作者

我叫Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。我自2007年以来一直在撰写编程文章。迄今为止,我已撰写了1400多篇文章和8本电子书。我在编程教学方面拥有超过十年的经验。

列出 所有 PowerShell 教程