首页/系统/Windows 运维速查/Remove-Item 删除文件与目录
PowerShell 基础66 条

Remove-Item 删除文件与目录

删除文件/目录/注册表项;-Recurse 删目录树、-Force 处理隐藏与只读项——高风险操作,执行前务必核对路径。

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

Remove-Item 是什么

Remove-Item 删除文件、目录、注册表项等对象,是 PowerShell 里破坏力最强的日常命令之一:默认不进回收站,配合递归参数可以一次清掉整棵目录树。它提供了两道安全阀——预演参数只输出将要删除的对象而不执行,确认参数则逐项询问。脚本里最危险的场景是路径变量被拼接成上级目录或为空,导致删除范围远超预期,因此执行前的核对与预演不是可选项。

基本信息

适用平台Windows PowerShell 5.1 与 PowerShell 7 及以上
语法Remove-Item [-Path] <路径> [-Recurse] [-Force] [-WhatIf] [-Confirm]
参数含义-Recurse 递归删除目录内容、-Force 处理隐藏与只读项、-WhatIf 预演、-Confirm 逐项确认
安全阀预演与确认参数可先用来看清删除范围
回收站默认不进回收站,删除后常规方式无法还原
适用对象文件、目录、注册表项、证书等提供程序下的对象

典型使用场景

  • 清理临时文件与过期日志,通常配合时间条件先筛选再删除
  • 删除整棵缓存目录,用递归参数配合强制参数处理只读项
  • 删除注册表项或证书,用于重置配置
  • 脚本收尾:任务完成后清掉中间产物,避免占空间
  • 按清单删除:先列出目标清单核对,再交给删除命令
  • 删除前先预演,确认命中范围符合预期

常用示例

常用示例
# 预演:只显示将要删除的对象
Remove-Item D:\Temp\cache -Recurse -Force -WhatIf
# 删除单个文件(只读时加强制参数)
Remove-Item D:\Temp\old.log -Force
# 删除整个缓存目录
Remove-Item D:\Temp\cache -Recurse -Force
# 先筛选再删除:只删 30 天前的日志
Get-ChildItem D:\Logs -File -Filter *.log | Where-Object LastWriteTime -lt (Get-Date).AddDays(-30) | Remove-Item -Force
# 删除注册表项
Remove-Item 'HKCU:\Software\Vendor\App' -Recurse -WhatIf
# 逐项确认(交互场景)
Remove-Item D:\Data\* -Recurse -Confirm

参数与风险

参数作用风险提示
-Recurse递归删除目录内容范围迅速扩大,务必先预演
-Force处理隐藏与只读项绕过只读保护,误删后无法恢复
-WhatIf只输出将删除的对象安全检查的首选动作
-Confirm逐项询问脚本中会挂住,仅适合手工操作
-LiteralPath按字面处理路径路径含通配符字符时必须使用
管道输入接收对象逐项删除上游筛选条件错会导致批量误删
删除前一定回显核对路径变量:为空或被拼接成上级目录时,递归删除会造成无法挽回的损失。生产环境建议先移动到隔离目录再定期清理,留出反悔余地。
删除失败通常有两个原因:文件被进程占用,或当前账号权限不足。前者需要先定位占用进程,后者需要提升权限或调整目标目录的访问控制。

易错点

  • 路径变量为空或拼接错误:会误删上级目录甚至更上层的内容,执行前必须回显核对
  • 不使用预演直接递归删除:删除不进回收站,无法撤销,先看清单再执行是唯一稳妥做法
  • 忽略文件占用:删除会失败并报错,先定位占用进程或停服务再处理
  • 在脚本中使用逐项确认参数:会等待输入导致任务挂住,自动化场景应改用预演加显式清单
  • 用通配符批量删除而未核对清单:上游筛选条件写错会波及无关文件,先输出清单确认再删

数据来源与参考

  • Microsoft Learn:Remove-Item

相关工具

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