Get-ChildItem -Exclude参数如何工作?它遵循什么规则?
Get-ChildItem的Get-Help根本没有详细说明:
省略指定的项目。此参数的值限定 路径参数。输入路径元素或模式,例如" * .txt"。 允许使用通配符。
在Stackoverflow和其他地方,普遍的共识似乎是它太难以使用,我们应该只将Get-ChildItem的输出传递给Where-Object。
虽然我愿意使用Where-Object,但我对规则感到好奇 - 排除如下。
例如,我有一个包含以下子文件夹的文件夹:
HsacFixtures
HsacFixturesBuild
RestFixture
RestFixtureBuild
如果我执行以下命令:
Get-ChildItem $rootFolderPath -Exclude HsacFixturesBuild -Directory
它返回预期的结果:
HsacFixtures
RestFixture
RestFixtureBuild
但是,如果我添加一个-Recurse参数:
Get-ChildItem $rootFolderPath -Exclude HsacFixturesBuild -Directory -Recurse
然后它返回HsacFixturesBuild文件夹中的子文件夹。
我还尝试了HsacFixturesBuild\
和HsacFixturesBuild\*
,结果相同。
那么 - 排除只适用于直接孩子,而不适用于大孩子或更深的子文件夹吗?
答案 0 :(得分:8)
Exclude
根据Name,
对于文件,获取文件的名称。对于目录,获取名称 如果存在层次结构,则为层次结构中的最后一个目录。 否则,Name属性将获取目录的名称
不是FullName,
获取目录或文件的完整路径
因此,即使对象是递归调用中的孙子,但排除只查看对象的Name
,而不是FullName
,因此排除不会影响省略,除非子对象共享一个公共子串恰好是排除参数
示例3:使用包含和排除
获取所有子项此命令列出Logs子目录中的.txt文件, 除外 那些名字以字母A 开头的人。它使用通配符 字符(*)表示Logs子目录的内容,而不是 目录容器。因为命令不包括 Recurse参数,该命令不包含内容 目录自动;你需要指定它。
Windows PowerShell
PS C:\> Get-ChildItem –Path "C:\Windows\Logs\*" -Include "*.txt" -Exclude "A*"
答案 1 :(得分:4)
关于if let columnType = String(validatingUTF8: sqlite3_column_decltype(pStmt, i))?.uppercased() {
// ...
}
,Get-ChildItem
参数适用于对象-exclude
从以下示例可以更好地理解: 请考虑以下文件夹结构
正如我们在上图中看到的,基于对象name
,name
被排除在外
现在我们看到可以看到folder
的子文件夹仍然存在,因为排除已应用于对象folder
希望这个HElps。