我想扫描一个目录(没有子目录)并删除任何扩展名为的文件。.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 }
添加到-Recurse
以Get-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
当然,不需要两次强制,但这就是正在起作用的方法,所以我坚持这样做。