递归获取 ChildItem 但排除父文件夹中的文件

Get-ChildItem recursively but exclude files in the parent folder

我需要获取 $PSScriptRoot 的所有子目录中的文件列表,但排除 $PSScriptRoot 的父文件夹中的所有文件。

$Files = Get-ChildItem -LiteralPath $PSScriptRoot -Recurse | Where-Object {!$_.PSIsContainer}

您只需再次调用 Get-ChildItem 作为管道

$Files = Get-ChildItem -LiteralPath $PSScriptRoot -Recurse | Where-Object {!$_.PSIsContainer} | Get-ChildItem

您可以添加一个 Where-Object 子句来过滤掉直接位于 $PSScriptRoot:

中的所有文件
$Files = Get-ChildItem -LiteralPath $PSScriptRoot -Recurse -File | Where-Object { $_.DirectoryName -ne $PSScriptRoot}

从 PowerShell 版本 3.0 开始,您可以使用开关 -File 而不是 Where-Object {!$_.PSIsContainer}

您可以先列出父文件夹,然后递归每个目录的文件:

$Files = Get-ChildItem -LiteralPath $PSScriptRoot -Directory | Get-ChildItem -File -Recurse