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

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

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

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

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

答案1

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

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

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


警告:del *.<extension>都会del <directory>\*.<extension>删除符合该模式的其他扩展名。这些文件不会被发送到回收站。

例如:del *.doc*删除 *.doc,*.docm和 *.docx.del <directory>\*.<extension>作品风格类似。

答案2

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

Get-ChildItem *.avi | foreach { Remove-Item -Path $_.FullName }

对于目录特定的版本:

Get-ChildItem -Path 'C:\Users\ramrod\Desktop\Firefly\' *.avi | foreach { Remove-Item -Path $_.FullName }

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

例子:

Get-ChildItem *.avi -Recurse | foreach { Remove-Item -Path $_.FullName }

答案3

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

Remove-Item 'C:\Users\ramrod\Desktop\Firefly\*' -Recurse -Include *.avi

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

  • 添加-WhatIf开关将列​​出将被删除的项目,但不会执行实际的删除。
  • 添加-Confirm开关将在删除每个文件之前提示你,这对于不太习惯电源外壳

答案4

这最终为我解决了问题 - 尝试了以上所有方法,但无济于事。

get-childitem "<drive>:\<folder>" -recurse -force -include *.<ext> | remove-item -force

当然,不需要两次强制,但这就是正在起作用的方法,所以我坚持这样做。

相关内容