Powershell删除具有特定文件扩展名的所有文件

use*_*140 37 powershell powershell-5.0

我想扫描一个目录(没有子目录)并删除任何扩展名为.avi 我尝试过这种语法的文件,但没有抛出错误,也没有删除任何文件。这是我试过的代码

get-childitem 'C:\Users\ramrod\Desktop\Firefly' -include *.avi | foreach ($_) {remove-item $_.fullname}
Run Code Online (Sandbox Code Playgroud)

为了.avi从文件夹中删除所有文件,应该更改什么?

Dav*_*lfe 23

假设在目录中打开 Powershell 实例的首选方法,通用版本如下:

Get-ChildItem *.avi | foreach { Remove-Item -Path $_.FullName }
Run Code Online (Sandbox Code Playgroud)

对于特定于目录的版本:

Get-ChildItem -Path 'C:\Users\ramrod\Desktop\Firefly' *.avi | foreach { Remove-Item -Path $_.FullName }
Run Code Online (Sandbox Code Playgroud)

添加-RecurseGet-ChildItem以影响所有包含的文件夹。

例子:

Get-ChildItem *.avi -Recurse | foreach { Remove-Item -Path $_.FullName }
Run Code Online (Sandbox Code Playgroud)


Gia*_*ree 19

使用del *.<extension>或其别名之一(例如rm,如果您更习惯于 bash)。

因此,将del *.avi删除.avi以当前工作目录结尾的所有文件。

使用del <directory>\*.<extension>在其他目录中删除文件。

  • 递归地执行此操作`ls *.avi -Recurse | foreach {rm $_}` (23认同)
  • 要对隐藏文件递归执行此操作`ls *.ini -Recurse -Force | foreach {rm -Force $_}` (2认同)

Kei*_*ler 15

删除,项目Cmdlet的应该是你所需要的。只需传递 avi 文件所在的根文件夹,并将-Recurse参数与过滤器一起传递:

Remove-Item 'C:\Users\ramrod\Desktop\Firefly\*' -Recurse -Include *.avi
Run Code Online (Sandbox Code Playgroud)

这应该比通过每个文件查找Get-ChildItem和调用文件执行得更快Remove-Item

  • 添加-WhatIf开关将列出将被删除但不执行实际删除的项目。
  • 添加-Confirm开关会在删除每个文件之前提示您,这对于不太熟悉PowerShell 的人来说更安全。

  • 使用 `-whatif` 来验证您将只删除要删除的文件是个好主意。尤其是在向那些技术专长未知的人提供删除命令时。最好保持训练轮。 (3认同)
  • 不知道为什么这个答案被否决了。 `-WhatIf` 开关是不必要的。我对此答案提交了编辑。 +1 `Remove-Item` commandlet 就是您所需要的,并且运行速度比当前接受的答案更快。 (2认同)