Get-ChildItem -Exclude 参数如何工作?

2023-12-25

Get-ChildItem -Exclude 参数如何工作?它遵循什么规则?

Get-ChildItem 的 Get-Help 根本不详细:

省略指定的项目。该参数的值限定 路径参数。输入路径元素或模式,例如“*.txt”。 允许使用通配符。

在 Stackoverflow 和其他地方,普遍的共识似乎是它太难使用,我们都应该将 Get-ChildItem 的输出通过管道传输到Where-Object。

虽然我愿意使用Where-Object,但我对下面的规则-Exclude 很好奇。

例如,我有一个包含以下子文件夹的文件夹:

HsacFixtures
HsacFixturesBuild
RestFixture
RestFixtureBuild

如果我执行以下命令:

Get-ChildItem $rootFolderPath -Exclude HsacFixturesBuild -Directory

它返回预期的结果:

HsacFixtures
RestFixture
RestFixtureBuild

但是,如果我添加 -Recurse 参数:

Get-ChildItem $rootFolderPath -Exclude HsacFixturesBuild -Directory -Recurse

然后它返回 HsacFixturesBuild 文件夹中的子文件夹。

我也尝试过HsacFixturesBuild\ and HsacFixturesBuild\*,具有相同的结果。

那么 -Exclude 是否仅适用于直接子文件夹,而不适用于孙子文件夹或更深的子文件夹?


Exclude省略基于的子对象Name https://msdn.microsoft.com/en-us/library/system.io.filesysteminfo.name(v=vs.110).aspx,

对于文件,获取文件的名称。对于目录,获取名称 如果存在层次结构,则为层次结构中的最后一个目录。 否则,Name 属性获取目录的名称

not the FullName https://msdn.microsoft.com/en-us/library/system.io.filesysteminfo.fullname(v=vs.110).aspx,

它获取目录或文件的完整路径

因此,即使该对象是递归调用中的孙子对象,排除也只会查看该对象的Name,不是FullName因此,排除不会影响省略,除非子对象共享名称的公共子字符串,而该名称恰好是排除参数的一部分

Source 获取子项目 https://technet.microsoft.com/en-us/library/hh849800(v=wps.640).aspx

示例 3:使用包含和排除获取所有子项

此命令列出 Logs 子目录中的 .txt 文件,除了 名字以字母A开头的人。它使用通配符 字符 (*) 表示 Logs 子目录的内容,而不是 目录容器。因为该命令不包含 递归参数,命令中不包含以下内容 自动目录;你需要指定它。

Windows PowerShell

PS C:\> Get-ChildItem –Path "C:\Windows\Logs\*" -Include "*.txt" -Exclude "A*"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Get-ChildItem -Exclude 参数如何工作? 的相关文章

随机推荐