【问题标题】:Powershell - Remove files inside the filtered folderPowershell - 删除过滤文件夹中的文件
【发布时间】:2021-03-28 08:33:19
【问题描述】:
我试图弄清楚如何从 Get-Childitem cmdlet 中删除多个过滤文件夹中的文件。
我想要的是在特定路径(Get-Childitem)中找到所有名为“Cache”的文件夹。
然后删除该缓存文件夹内的文件。
Powershell 版本:
5.1
下面的代码可能不起作用,可能是错误的通配符选择等?
Get-ChildItem "$env:LOCALAPPDATA\" -recurse -Filter "Cache\*" | foreach ($_) {remove-item $_.fullname -WhatIf -recurse}
希望有人可以帮助我,我在这方面有点菜鸟:)
谢谢!
【问题讨论】:
标签:
powershell
file
caching
filter
get-childitem
【解决方案1】:
由于您使用的是-Recurse 标志,因此您不需要在过滤器中使用\。以下过滤器将为您提供包含单词缓存的所有项目(包括文件和目录)(如 blacachebla)
Get-ChildItem $env:LOCALAPPDATA -recurse -Filter "*Cache*"
或者您可以使用-ErrorAction 开关在无法找到所有名为“缓存”的文件夹和文件时静默继续。
Get-ChildItem $env:LOCALAPPDATA -recurse -Filter "Cache" -ErrorAction SilentlyContinue
【解决方案2】:
谢谢你的解释。
使用-Filter "*Cache*" 不是我需要的。我想要确切的名称为 Cache 的文件夹。
如果我使用的是Get-ChildItem $env:LOCALAPPDATA -recurse -Filter "Cache" -ErrorAction SilentlyContinue | % { $_.FullName }
输出例如:
C:\Users\xxx\xxxxx\Cache
C:\Users\x\xxxxx\Cache
C:\Users\xx\xxx\Cache
C:\Users\x\xxx\Acrobat\Cache
我想从那里删除所有具有该名称缓存的文件夹中的文件和文件夹,我只是从Get-ChildItem中过滤
内部示例:C:\Users\x\xxx\Acrobat\Cache 有文件和文件夹,如 data_0、data_1、data_2、GPUCache(folder) 等。我想删除它们,但每个找到的缓存文件夹 (@987654325 @)
希望你能理解我的想法。
谢谢!
【解决方案3】:
经过一番挖掘,我找到了解决方案。
以下代码对我有用:
$base_dir = "$env:LOCALAPPDATA"
$name = 'Cache'
Get-ChildItem $base_dir -Recurse -Force | Where-Object {
$_.PSIsContainer -and
$_.Name -eq $name
} | Select-Object -Expand FullName | ForEach-Object {
Remove-Item "$_\*" -Recurse -whatif
}
(删除 -whatif,删除文件)