gpt4 book ai didi

powershell - 使用目录名称过滤器递归删除文件和目录

转载 作者:行者123 更新时间:2023-12-03 00:47:13 30 4
gpt4 key购买 nike

我正在尝试根据指定所需目录/子目录名称的过滤器删除所有目录、子目录和其中包含的文件。

例如,如果我有 c:\Test\A\B.doc、c:\Test\B\A\C.doc 和 c:\Test\B\A.doc 并且我的过滤器指定了所有目录命名为“A”,我希望其余的文件夹和文件分别为 c:\Test、c:\Test\B 和 c:\Test\B\A.doc。

我正尝试在 PowerShell 中执行此操作但不熟悉它。

以下 2 个示例将删除所有与我指定的过滤器匹配的文件,但也删除与过滤器匹配的文件。

$source = "C:\Powershell_Test" #location of directory to search
$strings = @("A")
cd ($source);
Get-ChildItem -Include ($strings) -Recurse -Force | Remove-Item -Force –Recurse

Remove-Item -Path C:\Powershell_Test -Filter A

最佳答案

我会用这样的东西:

$source = 'C:\root\folder'
$names = @('A')

Get-ChildItem $source -Recurse -Force |
Where-Object { $_.PSIsContainer -and $names -contains $_.Name } |
Sort-Object FullName -Descending |
Remove-Item -Recurse -Force

Where-Object 子句将 Get-ChildItem 的输出限制为名称在数组 $names 中的文件夹。按全名降序对剩余项目进行排序可确保子文件夹在其父文件夹之前被删除。这样您就可以避免在尝试删除已被之前的递归删除操作删除的文件夹时出错。

如果您有 PowerShell v3 或更新版本,您可以直接使用 Get-ChildItem 进行所有过滤:

Get-ChildItem $source -Directory -Include $names -Recurse -Force |
Sort-Object FullName -Descending |
Remove-Item -Recurse -Force

关于powershell - 使用目录名称过滤器递归删除文件和目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41493789/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com