Powershell - 删除过滤文件夹内的文件

Powershell - Remove files inside the filtered folder

我正在尝试了解如何从 Get-Childitem cmdlet 中删除多个筛选文件夹中的文件。

我想要的是在特定路径 (Get-Childitem) 中找到名称为“Cache”的所有文件夹。 然后删除缓存文件夹里面的文件。

Powershell 版本: 5.1

下面的代码可能无法正常工作,可能是错误的通配符选择等?

Get-ChildItem "$env:LOCALAPPDATA\" -recurse -Filter "Cache\*" | foreach ($_) {remove-item $_.fullname -WhatIf -recurse}

希望有人能帮助我,我在这方面有点菜鸟:)

谢谢!

由于您使用的是 -Recurse 标志,因此您不需要在过滤器中使用 \。以下过滤器将为您提供所有包含单词缓存的项目(包括文件和目录)(如 blacachebla)

Get-ChildItem $env:LOCALAPPDATA -recurse -Filter "*Cache*" 

或者您可以使用 -ErrorAction 开关在找不到所有名为“缓存”的文件夹和文件时静默继续。

Get-ChildItem $env:LOCALAPPDATA -recurse -Filter "Cache" -ErrorAction SilentlyContinue

谢谢你的解释。

使用 -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) 等文件和文件夹。我想删除,但对于每个找到的缓存文件夹 (foreach)

希望你能理解我的想法。

谢谢!

经过一番挖掘,我找到了解决方案。

以下代码对我有用:

$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,删除文件)