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,删除文件)
我正在尝试了解如何从 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,删除文件)