Remove-Item

删除指定项。

语法

Remove-Item
      [-Path] <String[]>
      [-Filter <String>]
      [-Include <String[]>]
      [-Exclude <String[]>]
      [-Recurse]
      [-Force]
      [-Credential <PSCredential>]
      [-WhatIf]
      [-Confirm]
      [-Stream <String[]>]
      [<CommonParameters>]
Remove-Item
      -LiteralPath <String[]>
      [-Filter <String>]
      [-Include <String[]>]
      [-Exclude <String[]>]
      [-Recurse]
      [-Force]
      [-Credential <PSCredential>]
      [-WhatIf]
      [-Confirm]
      [-Stream <String[]>]
      [<CommonParameters>]
Remove-Item
      [-Path] <String[]>
      [-Filter <String>]
      [-Include <String[]>]
      [-Exclude <String[]>]
      [-Recurse]
      [-Force]
      [-Credential <PSCredential>]
      [-WhatIf]
      [-Confirm]
      [-DeleteKey]
      [<CommonParameters>]
Remove-Item
      -LiteralPath <String[]>
      [-Filter <String>]
      [-Include <String[]>]
      [-Exclude <String[]>]
      [-Recurse]
      [-Force]
      [-Credential <PSCredential>]
      [-WhatIf]
      [-Confirm]
      [-DeleteKey]
      [<CommonParameters>]
Remove-Item
      [-Path] <string[]>
      [-Filter <string>]
      [-Include <string[]>]
      [-Exclude <string[]>]
      [-Recurse]
      [-Force]
      [-Credential <pscredential>]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]
Remove-Item
      -LiteralPath <string[]>
      [-Filter <string>]
      [-Include <string[]>]
      [-Exclude <string[]>]
      [-Recurse]
      [-Force]
      [-Credential <pscredential>]
      [-WhatIf]
      [-Confirm]
      [<CommonParameters>]

说明

Remove-Item 会删除一个或多个项。 由于许多提供程序都支持它,因此它可以删除多种不同类型的项,其中包括文件、文件夹、注册表项、变量、别名和函数。

示例

示例 1:删除具有任何文件扩展名的文件

此示例会从 C:\Test 文件夹中删除名称中包含点 (.) 的所有文件。 由于该命令指定了一个点,因此不会删除没有文件扩展名的文件夹或文件。

Remove-Item C:\Test\*.*

示例 2:删除文件夹中的文档文件

此示例从当前文件夹中删除文件扩展名为 .doc 且名称不包含 *1* 的所有文件。

Remove-Item * -Include *.doc -Exclude *1*

它使用通配符 (*) 来指定当前文件夹的内容。 它使用 IncludeExclude 参数来指定要删除的文件。

示例 3:删除隐藏的只读文件

此命令将删除隐藏且为只读的文件。

Remove-Item -Path C:\Test\hidden-RO-file.txt -Force

它使用 Path 参数来指定文件。 它使用 Force 参数来授予删除文件的权限。 如果没有 Force,将无法删除只读隐藏文件。

示例 4:以递归方式删除子文件夹中的文件

此命令将以递归方式删除当前文件夹和所有子文件夹中的所有 CSV 文件。

由于 Remove-Item 中的 Recurse 参数存在已知问题,因此本示例中的命令使用 Get-ChildItem 获取所需文件,然后使用管道运算符将它们传递给 Remove-Item

Get-ChildItem * -Include *.csv -Recurse | Remove-Item

Get-ChildItem 命令中,Path 的值为 (*),它表示当前文件夹的内容。 它使用 Include 指定 CSV 文件类型,并使用 Recurse 进行递归检索。 如果你尝试在路径中指定文件类型,如 -Path *.csv,则此 cmdlet 将把搜索对象解释为没有子项的文件,Recurse 将失败。

注意

此行为已在 Windows 版本 1909 及更新中修复。

示例 5:以递归方式删除子项

此命令将删除“OldApp”注册表项及其所有子项和值。 它使用 Remove-Item 删除项。 指定了路径,但是省略了可选的参数名 (Path)。

Recurse 参数可以递归方式删除“OldApp”注册表项的所有内容。 如果该注册表项包含子项,而你省略了 Recurse 参数,则会提示你确认是否要删除该注册表项的内容。

Remove-Item HKLM:\Software\MyCompany\OldApp -Recurse

示例6:删除带有特殊字符的文件

以下示例演示如何删除包含特殊字符(如方括号或圆括号)的文件。

Get-ChildItem

Directory: C:\temp\Downloads

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a---          6/1/2018  12:19 PM           1362 myFile.txt
-a---          6/1/2018  12:30 PM           1132 myFile[1].txt
-a---          6/1/2018  12:19 PM           1283 myFile[2].txt
-a---          6/1/2018  12:19 PM           1432 myFile[3].txt

Get-ChildItem | Where-Object Name -Like '*`[*'

Directory: C:\temp\Downloads

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a---          6/1/2018  12:30 PM           1132 myFile[1].txt
-a---          6/1/2018  12:19 PM           1283 myFile[2].txt
-a---          6/1/2018  12:19 PM           1432 myFile[3].txt

Get-ChildItem | Where-Object Name -Like '*`[*' | ForEach-Object { Remove-Item -LiteralPath $_.Name }
Get-ChildItem

Directory: C:\temp\Downloads

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a---          6/1/2018  12:19 PM           1362 myFile.txt

示例 7:删除备用数据流

此示例演示如何使用 Remove-Item cmdlet 的 Stream 动态参数删除备用数据流。 数据流参数是在 Windows PowerShell 3.0 中引入的。

Get-Item C:\Test\Copy-Script.ps1 -Stream Zone.Identifier

FileName: \\C:\Test\Copy-Script.ps1

Stream                   Length
------                   ------
Zone.Identifier              26

Remove-Item C:\Test\Copy-Script.ps1 -Stream Zone.Identifier
Get-Item C:\Test\Copy-Script.ps1 -Stream Zone.Identifier

Get-Item : Could not open alternate data stream 'Zone.Identifier' of file 'C:\Test\Copy-Script.ps1'.

Stream 参数 Get-Item 获取 Copy-Script.ps1 文件的 Zone.Identifier 流。 Remove-Item 使用 Stream 参数删除文件的 Zone.Identifier 流。 最后,Get-Item cmdlet 显示 Zone.Identifier 流已删除。

参数

-Confirm

提示你在运行 cmdlet 之前进行确认。 有关详细信息,请参阅以下文章:

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
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

-DeleteKey

这是 Certificate 提供程序提供的动态参数。 Certificate 提供程序和此参数仅在 Windows 平台上可用。

如果提供,cmdlet 会在删除证书时删除私钥。

有关详细信息,请参阅 about_Certificate_Provider

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

-Exclude

指定此 cmdlet 将在操作中排除的一个项或多个项(作为一个字符串数组)。 此参数值使 Path 参数有效。 请输入路径元素或模式,例如 *.txt。 允许使用通配符。 仅当该命令包括项的内容时(例如 C:\Windows\*,其中通配符指定 C:\Windows 目录的内容),Exclude 参数才有效。

RecurseExclude 一起使用时,Exclude 将仅筛选当前目录的结果。 如果子文件夹中存在与 Exclude 模式匹配的文件,则这些文件及其父目录将被删除。

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 移除非此不能更改的项,如隐藏文件或只读文件,或者只读别名或变量。 该 cmdlet 无法删除常量别名或变量。 不同提供程序有不同的实现。 有关详细信息,请参阅 about_Providers。 即使使用 Force 参数,该 cmdlet 也无法覆盖安全限制。

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

-Include

指定此 cmdlet 将在操作中包含的一个项或多个项(作为一个字符串数组)。 此参数值使 Path 参数有效。 请输入路径元素或模式,例如 "*.txt"。 允许使用通配符。 仅当该命令包括项的内容时(例如 C:\Windows\*,其中通配符指定 C:\Windows 目录的内容),Include 参数才有效。

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

-Path

指定要删除的项的路径。 允许使用通配符。

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

-Recurse

指示此 cmdlet 删除指定位置和位置的所有子项中的项。

Recurse 参数可能不会删除所有子文件夹或所有子项。 这是已知问题。

注意

此行为已在 Windows 版本 1909 及更高版本中修复。

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

-Stream

这是 FileSystem 提供程序提供的动态参数。 此参数仅在 Windows 上可用。 此参数不能与 Recurse 参数结合使用。

可以使用 Remove-Item 删除备用数据流,例如 Zone.Identifier。 但是,若要取消安全检查(该安全检查可阻止从 Internet 下载的文件),则不建议使用此方法。 如果你已验证下载的文件是安全的,请使用 Unblock-File cmdlet。

已在 Windows PowerShell 3.0 中引入了此参数。 从 Windows PowerShell 7.2 开始,Remove-Item 可以从目录和文件中删除替代数据流。

有关详细信息,请参阅 about_FileSystem_Provider

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

-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

此 cmdlet 不返回任何输出。

备注

PowerShell 包含 Remove-Item 的以下别名:

  • 所有平台:
    • del
    • erase
    • rd
    • ri
  • Windows:
    • rm
    • rmdir

Remove-Item cmdlet 用于处理由任何提供程序公开的数据。 若要列出会话中可用的提供程序,请键入 Get-PsProvider。 有关详细信息,请参阅 about_Providers

尝试在不使用 Recurse 参数的情况下删除包含项目的文件夹时,cmdlet 会提示你确认。 使用 -Confirm:$false 不会抑制提示。 这是设计的结果。