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

时间:2016-11-02 00:52:18

标签: powershell

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\*,结果相同。

那么 - 排除只适用于直接孩子,而不适用于大孩子或更深的子文件夹吗?

2 个答案:

答案 0 :(得分:8)

Exclude根据Name

省略子对象
  

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

不是FullName

  

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

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

的一部分的名称

来源Get-ChildItem

  

示例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

从以下示例可以更好地理解: 请考虑以下文件夹结构

enter image description here

首先我们使用-exclude参数而不使用recurse。 enter image description here

正如我们在上图中看到的,基于对象namename被排除在外

现在我们将recurse参数添加到上面的语句中,如下所示 enter image description here

现在我们看到可以看到folder的子文件夹仍然存在,因为排除已应用于对象folder

希望这个HElps。