Remove-Item with Recurse 并排除多个子目录
Remove-Item with Recurse and Exclude multiple subdirectories
我正在尝试创建一个脚本来删除文件夹中的所有文件和目录,除了指定文件夹及其内容。
示例树:
测试/
- 图片/
- folder_to_keep/
-杂项/
-废话/
- some_other_folder/
- another_to_keep/
- 混乱/
我搜索了这个具体问题,但运气不佳。我试过:
Remove-Item .\test\* -Exclude (".\test\images\folder_to_keep", ".\test\some_other_folder\another_to_keep") -Recurse
但这仍然会删除所有内容。
仅供参考,如果对任何人有帮助,我正在尝试 运行 在 Atlassian Bamboo 服务器上的构建作业中使用此脚本。参见:https://confluence.atlassian.com/bamboo0515/script-894237366.html。如果有更好的方法使用他们的选项(Shell、Windows PowerShell、/bin/sh 或 cmd.exe),那也很棒。
编辑:robocopy 也可能是一个选项。基本问题是我需要镜像源路径和目标路径,但目标中的文件夹必须保持不变(它们从另一个进程中填充)。
-Exclude
仅适用于叶元素,不适用于完整路径。例如,过滤器 -Exclude 'foo'
会从结果列表中删除名为 "foo" 的文件夹, 但不会删除其文件或子文件夹。
在正则表达式中组合要排除的父路径并使用正则表达式(非)匹配。
$excludes = "$($pwd.Path)\test\images\folder_to_keep",
"$($pwd.Path)\test\some_other_folder\another_to_keep"
$re = ($excludes | ForEach-Object {[regex]::Escape($_)}) -join '|'
Get-ChildItem -Recurse -Force | Where-Object {
$_.FullName -notmatch "^$re"
} | Remove-Item -Force
我正在尝试创建一个脚本来删除文件夹中的所有文件和目录,除了指定文件夹及其内容。
示例树:
测试/ - 图片/ - folder_to_keep/ -杂项/ -废话/ - some_other_folder/ - another_to_keep/ - 混乱/
我搜索了这个具体问题,但运气不佳。我试过:
Remove-Item .\test\* -Exclude (".\test\images\folder_to_keep", ".\test\some_other_folder\another_to_keep") -Recurse
但这仍然会删除所有内容。
仅供参考,如果对任何人有帮助,我正在尝试 运行 在 Atlassian Bamboo 服务器上的构建作业中使用此脚本。参见:https://confluence.atlassian.com/bamboo0515/script-894237366.html。如果有更好的方法使用他们的选项(Shell、Windows PowerShell、/bin/sh 或 cmd.exe),那也很棒。
编辑:robocopy 也可能是一个选项。基本问题是我需要镜像源路径和目标路径,但目标中的文件夹必须保持不变(它们从另一个进程中填充)。
-Exclude
仅适用于叶元素,不适用于完整路径。例如,过滤器 -Exclude 'foo'
会从结果列表中删除名为 "foo" 的文件夹, 但不会删除其文件或子文件夹。
在正则表达式中组合要排除的父路径并使用正则表达式(非)匹配。
$excludes = "$($pwd.Path)\test\images\folder_to_keep",
"$($pwd.Path)\test\some_other_folder\another_to_keep"
$re = ($excludes | ForEach-Object {[regex]::Escape($_)}) -join '|'
Get-ChildItem -Recurse -Force | Where-Object {
$_.FullName -notmatch "^$re"
} | Remove-Item -Force