首页/系统/Windows 运维速查/Copy-Item 复制文件与目录
PowerShell 基础66 条

Copy-Item 复制文件与目录

复制文件、目录(含 -Recurse),支持强制覆盖;与 CMD 的 copy/xcopy 相比对象语义更清晰。

Windows 运维速查系统更新于 2026-10-13

Copy-Item 是什么

Copy-Item 复制文件与目录,是 PowerShell 里的通用复制命令:对象语义清晰,可以直接接收管道里筛好的文件对象,也能用强制参数处理只读目标。复制目录时必须加递归参数,否则只会在目标建一个空目录而不报错,这是最容易漏检的问题。它的适用场景是脚本中的中小规模复制;大目录迁移建议换用带日志、重试与多线程能力的专用复制工具,出问题时也更容易定位。

基本信息

适用平台Windows PowerShell 5.1 与 PowerShell 7 及以上
语法Copy-Item [-Path] <源> [-Destination] <目标> [-Recurse] [-Force] [-Container]
目录复制必须加递归参数,否则只建空目录
覆盖行为目标已存在时默认覆盖,只读属性文件需加强制参数
管道输入可接收文件对象,配合筛选实现精准复制
不保留项默认不复制访问控制权限,需要保留属性时改用专用工具

典型使用场景

  • 复制单个文件到备份目录,覆盖前用强制参数处理只读属性
  • 按筛选结果复制:先取符合条件的文件对象再交给复制命令
  • 复制整个目录树到网络共享或另一块盘
  • 部署脚本中分发程序文件到多个目标位置
  • 复制时保留目录结构,或只保留内容不留外层目录
  • 复制注册表项内容,用于配置迁移

常用示例

常用示例
# 复制文件到已存在目录(文件会放入该目录)
Copy-Item D:\Src\app.exe D:\Bak\ -Force
# 复制整个目录树
Copy-Item D:\Web \\srv\share\web -Recurse -Force
# 只复制目录内容,不要外层目录
Copy-Item D:\Web\* \\srv\share\web -Recurse -Force
# 按筛选结果复制:先取对象再复制
Get-ChildItem D:\Logs -File -Filter *.log | Where-Object LastWriteTime -gt (Get-Date).AddDays(-1) | Copy-Item -Destination D:\Bak
# 复制并保留目录结构到目标
Get-ChildItem D:\Web -Recurse -File | Copy-Item -Destination { 'D:\Bak\' + $_.FullName.Substring(6) } -Force
# 复制前先预演
Copy-Item D:\Web \\srv\share\web -Recurse -WhatIf

参数与行为

参数作用注意点
-Recurse递归复制目录内容不加时目录只被复制成空壳
-Force覆盖只读文件与隐藏项大范围覆盖前先预演
-Container保留容器结构与递归配合控制目录层级
-Destination目标路径目标为已存在目录时源放入其内
-WhatIf预演将执行的动作批量复制前的安全检查
管道输入接收文件对象便于先筛选后复制
复制目录时忘记递归参数是最隐蔽的错误:命令不报错,目标却只有一层空目录,事后核对时容易误以为已经复制完成。
跨卷或跨网络复制大文件耗时较长,脚本里应设置合理的超时与错误处理;需要日志与重试时换用专用复制工具,效率与可观测性都更好。

易错点

  • 复制目录没加递归参数:只建出空目录且不报错,是漏检率最高的用法错误
  • 目标写法弄错层级:目标目录已存在时源会放进目录内部,行多一层或路径对不上时先核对再执行
  • 以为会保留权限:默认不复制访问控制权限,权限敏感的场景要改用支持保留属性的工具
  • 大批量复制不用预演:覆盖范围大时先看清单,避免误覆盖目标中的既有文件
  • 跨网络复制不做容错:链路抖动会导致部分文件失败,需要重试与结果核对

数据来源与参考

  • Microsoft Learn:Copy-Item

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌