Tec*_*et9 23 regex windows powershell file-io file
我知道我的Windows计算机上许多不需要的文件的文件名的共同特征.如何使用单个正则表达式 PowerShell命令从给定文件夹或文件夹层次结构中删除所有这些文件?
The*_*ian 37
您可以通过接受RegEx模式的Where-Object过滤器管道Get-ChildItem命令,然后将其传递到Remove-Item.我认为这将比使用Select-String更快,更好的结果.使用如下命令:
Get-ChildItem $Path | Where{$_.Name -Match "<RegEx Pattern>"} | Remove-Item
Run Code Online (Sandbox Code Playgroud)
Name属性仅匹配文件或文件夹的名称以及文件的扩展名.它不会与路径上的其他东西相匹配.这会将FileInfo对象传递给管道,Remove-Item将作为管道输入传递,并将删除有问题的文件.
如果要包含路径的子文件夹,可以将-Recurse开关添加到Get-ChildItem命令,它看起来像这样:
Get-ChildItem $Path -Recurse | Where{$_.Name -Match "<RegEx Pattern>"} | Remove-Item
Run Code Online (Sandbox Code Playgroud)
如果您只想删除文件,可以在Where语句中通过查看FileInfo对象的PSIsContainer属性来指定它,并通过在对象前面加上一个感叹号来反转它:
Get-ChildItem $Path -Recurse | Where{$_.Name -Match "<RegEx Pattern>" -and !$_.PSIsContainer} | Remove-Item
Run Code Online (Sandbox Code Playgroud)
您可以使用命令,
ls -name | select-string -pattern ".*\(\d+\).*" | %{rm $_}
Run Code Online (Sandbox Code Playgroud)
其中引号的内容是您的正则表达式。此示例中的正则表达式搜索文件名中包含 (#) 的文件,其中 # 是任何非负整数。这对于删除同一组文件已被多次转储的文件夹中的重复项非常有用,例如音乐管理器。
如果在 -name 后添加 -r
ls -name -r | select-string -pattern ".*\(\d+\).*" | %{rm $_}
Run Code Online (Sandbox Code Playgroud)
它将遍历子文件夹并删除所有子文件夹中的匹配文件。
命令的结构如下:
| 归档时间: |
|
| 查看次数: |
21197 次 |
| 最近记录: |