问题描述
我需要获取 $PSScriptRoot 的所有子目录中的文件列表,但排除 $PSScriptRoot 父文件夹中的所有文件。
$Files = Get-ChildItem -LiteralPath $PSScriptRoot -Recurse | Where-Object {!$_.PSIsContainer}
解决方法
您可以先列出父文件夹,然后递归文件的每个目录:
$Files = Get-ChildItem -LiteralPath $PSScriptRoot -Directory | Get-ChildItem -File -Recurse
,
您可以添加一个 Where-Object
子句来过滤掉 $PSScriptRoot 中直接存在的所有文件:
$Files = Get-ChildItem -LiteralPath $PSScriptRoot -Recurse -File | Where-Object { $_.DirectoryName -ne $PSScriptRoot}
从 PowerShell 3.0 版开始,您可以使用开关 -File
而不是 Where-Object {!$_.PSIsContainer}
你只需要再次调用 Get-ChildItem 作为管道
$Files = Get-ChildItem -LiteralPath $PSScriptRoot -Recurse | Where-Object {!$_.PSIsContainer} | Get-ChildItem