使用Powershell递归删除文件夹问题

b4lqfgs4  于 2023-01-26  发布在  Shell
关注(0)|答案(1)|浏览(190)

我需要删除文件夹“ToDelete”下的一些子文件夹。我正在使用此命令执行此操作:(两者应执行相同的删除操作)。我的问题是ToDelete文件夹下还有一个名为“Do_Not_Copy”的文件夹,该文件夹还包含一个名为“Tools”的文件夹,该文件夹不应被删除。如何保护此“Tools”子文件夹?-排除不起作用。目前的解决方法是对“Tools”文件夹使用重命名项

$DestinationFolder = "\\google\server\ToDelete"

Remove-Item -Path $DestinationFolder\  -Include "Tools", "Support", "Installer", "GUI", "Filer", "Documentation" -Recurse -Exclude "Do_not_copy\SI\Tools" -Force 
Get-ChildItem $DestinationFolder\ -Include "Tools", "Support", "Installer", "GUI", "Filer", "Documentation" -Recurse -Force | ForEach-Object { Remove-Item -Path $_.FullName -Recurse -Force }
i5desfxk

i5desfxk1#

-Recurse开关无法在Remove-Item上正常工作(它将尝试在删除文件夹中的所有子文件夹之前删除文件夹)。
按长度降序排列全名可确保在删除文件夹中的所有子项之前不删除任何文件夹。
试试看

$rootFolder = '\\google\server\ToDelete'
# create a regex of the folders to exclude
$Exclude = 'Do_not_copy\SI\Tools'  # this can be an array of items to exclude or a single item
# each item will be Regex Escaped and joined together with the OR symbol '|'
$notThese = ($Exclude | ForEach-Object { [Regex]::Escape($_) }) -join '|'
# the array of folder names (not full paths) to delete
$justThese = 'Tools', 'Support', 'Installer', 'GUI', 'Filer', 'Documentation'

(Get-ChildItem -Path $rootFolder -Directory -Recurse -Include $justThese).FullName |
    Where-Object { $_ -notmatch $notThese } |
    Sort-Object Length -Descending |
    Remove-Item -Recurse -Confirm:$false -Force -WhatIf

像往常一样,我添加了-WhatIf安全开关,所以不会删除任何文件夹,在控制台中您可以看到 * 会 * 发生什么。当您满意正确的文件夹将被删除时,注解掉或删除该-WhatIf开关,然后再次运行

相关问题