Powershell 使用递归全局模式的include和exclude数组选择文件

Powershell 使用递归全局模式的include和exclude数组选择文件,powershell,Powershell,我得到了JSON中的两个文件glob参数,include和exclude,格式如下: { include: ['**/*.md', '**/swagger/*.json', '**/*.yml', 'somedir/*.yml'], exclude: ['**/obj/**', 'otherdir/**', '**/includes/**'] } 我的任务是遍历目录树,根据这些格式中的包含和排除规则选择文件;这必须作为Powershell脚本编写 我一直在试图找到一个支持双星号

我得到了JSON中的两个文件glob参数,
include
exclude
,格式如下:

{
    include: ['**/*.md', '**/swagger/*.json', '**/*.yml', 'somedir/*.yml'],
    exclude: ['**/obj/**', 'otherdir/**', '**/includes/**']
}
我的任务是遍历目录树,根据这些格式中的包含和排除规则选择文件;这必须作为Powershell脚本编写

我一直在试图找到一个支持双星号递归文件glob模式的内置命令;此外,由于Powershell正在将JSON转换为对象,因此如果命令参数可以接受数组作为输入就更好了

我已经看过了
Get ChildItem
,但我不确定是否可以使用
-include
-exclude
和/或
-filter
模拟全局分辨率行为。我还研究了
解析路径
,但我不确定通配符是否能正常工作(我可能需要手动排除路径)

如何使用Powershell中的多个递归通配符文件全局选择路径,同时排除其他全局?是否有支持此功能的Powershell命令

谢谢大家!

编辑: 在这些全局模式中,单个星号是一个常规通配符。然而,双星号(**)是一个已知的标准,表示递归目录搜索

例如:模式
dir1/*/file.txt
将匹配:

dir1/dir2/file.txt
dir1/dir3/file.txt
……但不是:

dir1/dir2/dir3/file.txt
模式dir1/**/file.txt将匹配上述选择器将匹配的所有内容,但它也将匹配:

dir1/dir3/dir4/file.txt
dir1/dir7/dir9/dir23/dir47/file.txt

等等。因此,像
**/obj/**
这样的排除glob模式基本上意味着“排除在目录层次结构中任何点的任何obj文件夹中找到的任何内容,无论其深度有多深”。

@Bill\u Stewart双星号(
**
)是一个已知的标准;它表示递归目录搜索。例如,模式
dir1/*/file.txt
将匹配
dir1/dir2/file.txt
dir1/dir3/file.txt
,但不匹配
dir1/dir2/dir3/file.txt
。模式
dir1/**/file.txt
将匹配
dir1/dir2/file.txt
/dir1/dir3/dir4/file.txt
dir1/dir7/dir9/dir23/dir47/file.txt
,等等。单星号只是一个普通的通配符。@Bill_Stewart我在问题中添加了这个解释。PowerShell的文件选择和通配符匹配工作原理如文档页面所述;实现其他行为需要在代码中进行设计。听起来像是一个有趣的项目,你可以在完成后提供。