我需要使用 PowerShell 归档一个没有一些子文件夹和文件的文件夹。我的文件/文件夹排除项可以发生在任何层次结构级别。为了解释,这里是一个 WinForms VS 项目的简单示例。如果我们在 VS 中打开它并构建,VS 会创建带有可执行内容的 bin/obj 子文件夹、带有用户设置的隐藏 .vs 文件夹,以及可能包含在解决方案中的项目的 *.user 文件。我想存档这样的 VS 解决方案文件夹,而没有在我们下次构建解决方案时可以重新创建的所有文件和文件夹项目。
7-Zip 使用它的 -x 可以很容易地完成它!命令行开关:
"C:\Program Files\7-Zip\7z.exe" a -tzip "D:\Temp\WindowsFormsApp1.zip" "D:\Temp\WindowsFormsApp1\" -r -x!bin -x!obj -x!.vs -x!*.suo -x!*.user
但是,我无法构建等效的 PowerShell 脚本。我得到的最好的东西是这样的:
$exclude = "bin", "obj", ".vs", "*.suo", "*.user"
$files = Get-ChildItem -Path $path -Exclude $exclude -Force
Compress-Archive -Path $files -DestinationPath $dest -Force
如果我执行此脚本,则排除列表仅适用于第一个层次结构级别的子文件夹。如果我将 -Recurse 开关添加到脚本中的Get-ChildItem cmdlet 或尝试使用Where-Object过滤文件/文件夹,我会丢失存档中的文件夹层次结构。
我的问题有解决方案吗?我需要在没有任何外部工具的情况下仅使用 PowerShell 来解决问题。