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


21

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

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

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


3
是什么导致您无法使用rm *.avi?(是的,这是有效的PowerShell语法,因为rm是一个别名del
GiantTree

2
从技术上讲,rm并且del都是Remove-Itemcmdlet的别名。

Answers:


15

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

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

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


14
要递归执行此操作ls *.avi -Recurse | foreach {rm $_}
Kolob Canyon

11

假设在目录中打开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 }

2

Remove-ItemCommandlet应该就是您所需要的。只需传递avi文件所在的根文件夹,然后将recurse标志和过滤器一起传递即可:

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

这比通过Get-ChildItemRemove-Item为每个文件调用查找文件要快。

添加-WhatIf开关将在删除每个文件之前提示您,这对于不熟悉PowerShell的人来说更安全。


1
不知道为什么这个答案不好。该-WhatIf开关是不必要的。我对此答案进行了修改。+1该Remove-ItemCommandlet是您所需要的,并且比当前接受的答案运行得更快。
格雷格·伯格哈特

-whatif验证您将仅删除要删除的文件是一个好主意。特别是在向技术专业知识不明的人员提供删除命令时。最好保持训练轮转动。
基思·米勒

0

假设当前目录中有几个文本文件。
dir * -include *.txtdir *.txt按预期工作,但dir -include *.txt什么也没做。原因已在Stack Overflow中得到了很好的解释。

更正的命令:
dir 'C:\Users\ramrod\Desktop\Firefly\*.avi' | foreach {del $_}


0

终于为我做到了-在上面和nada上都尝试过。

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

确保不需要两个力,但这是有效的,这就是我坚持的目标。


0

尝试这个

Remove-Item "c:\temp\*.txt" 

1
嘿,这似乎并没有删除avi文件,也似乎没有从相关文件夹中删除它。您能否改善这个答案或解释在这种情况下可能有什么帮助?
Sirex
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.